6

Jestem w trakcie tworzenia mojego widgetu. Jak już umieściliśmy naszą aplikację z integracją widgetów. Ale teraz mam problem z dzisiejszym widżetem w iOS. Napisałem kod dla dwóch przypadków. Pierwszy raz, gdy widget jest początkowo ładowany po raz pierwszy przy uruchomieniu aplikacji, wywołuje usługę sieci Web i pobiera dane przez Internet, a następnie zapisujemy je w domyślnej konfiguracji użytkownika, aby móc później korzystać z niej."Nie można załadować" wiadomość w Widżecie dnia dzisiejszego

Teraz, gdy następnym razem użytkownik opuści menu powiadomień, najpierw wyświetlamy naszą starą zapisaną zawartość użytkownikowi, a następnie pobieramy ją z usługi internetowej i przechowujemy w tabeli domyślnej użytkownika, a następnie ponownie ładujemy tabelę.

Dla powyższej operacji mam problem z wielkością treści dla tabeli, migotaniem i komunikat "nie można załadować" w niektórych przypadkach.

Teraz spójrz na poniższy kod, wykonuję połączenie internetowe w poniższej metodzie, a po odpowiedzi serwisu internetowego, po prostu obsługuję program obsługi zakończenia.

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { 
    // Perform any setup necessary in order to update the view. 
    // If an error is encountered, use NCUpdateResultFailed 
    // If there's no update required, use NCUpdateResultNoData 
    // If there's an update, use NCUpdateResultNewData 
    [self getBookedAppointmentsNew:completionHandler]; 
} 

Proszę, podziel się ze mną swoimi doświadczeniami i pomysłami.

+0

Wystarczy jednoznacznie, że wywołujesz usługę sieciową i nie wywołujesz procedury obsługi zakończenia do momentu zakończenia tego połączenia? –

+0

Tak, robię to samo .. Wzywam serwis internetowy i po zakończeniu usługi, uzupełniam go o obsługę zakończenia. –

+0

Właściwie, za każdym razem muszę wywoływać usługę sieciową, aby pobrać najnowsze informacje dla klientów, ale dopóki ich nie pobiorę, staram się pokazać wcześniej pobrane dane klientom. Tak więc nie ma szans na migotanie ekranu. Chcę odświeżyć widok z nową zawartością bez żadnych skutków ubocznych. –

Odpowiedz

2

W końcu udało mi się rozwiązać problem. Proszę spojrzeć na poniższy kod.

W metodzie viewDidLoad() właśnie ustawiłem preferowany rozmiar zawartości widoku na podstawową wysokość, która jest mi potrzebna przy uruchamianiu, aby pokazać mój widok od dołu, a następnie wykonałem wywołanie usługi internetowej, aby pobrać dane. Po pobraniu danych ustawiłem ponownie preferowany rozmiar zawartości widoku TodayWidget.

-(void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, 0.0, self.bottomView.frame.size.width, self.bottomView.frame.size.height); 
     self.preferredContentSize = CGSizeMake(self.view.frame.size.width, self.bottomView.frame.size.height); 
     [self getBookedAppointmentsNew]; 
    } 

-(void)getBookedAppointmentsNew 
    { 
     //-- After web-service response (positive/negative), I have set again the preferred content size. 
     self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.scrollView.frame.size.height, self.bottomView.frame.size.width, self.bottomView.frame.size.height); 
     self.preferredContentSize = CGSizeMake(self.view.frame.size.width, (self.bottomView.frame.origin.y + self.bottomView.frame.size.height)); 
    } 

Śledzę powyższe kroki, aby rozwiązać problemy dotyczące „Nie można załadować” & „ekran migocze” z dzisiaj Extension.

+0

Świetne podejście, moim celem było "self.view.frame.size.width" –

4

Ogólnie widziałem komunikat "Nie można załadować", gdy wystąpił błąd w widgecie. Widżet próbuje się załadować, a jeśli wielokrotnie się zawiesza, wyświetli komunikat "Nie można załadować". Debuguj swój widget i upewnij się, że nic nie powoduje awarii.

+3

Naprawiłem problemy w widgecie, ale wciąż wyświetlało się "nie można załadować". Okazało się, że iOS nawet nie próbował załadować widżetu, jeśli wystarczająco się zderzył. Musiałem ponownie uruchomić telefon, a następnie załadować. Dzięki za wskazówkę! – user3099609

Powiązane problemy