6

Ich bin mit meiner Widget-Entwicklung dazwischen. Da wir unsere App bereits mit Widget-Integration ausgestattet haben. Aber jetzt habe ich ein Problem mit dem heutigen Widget in iOS. Ich habe einen Code für zwei Fälle geschrieben. Das erste Mal, wenn das Widget zum ersten Mal mit dem Start der Anwendung geladen wird, ruft es den Web-Service auf und ruft Daten über das Internet ab. Anschließend speichern wir sie im Benutzerstandard für die spätere Verwendung.Meldung "Kann nicht geladen werden" im heutigen Widget

Jetzt, wenn das nächste Mal Benutzer das Benachrichtigungsmenü herunterziehen, zeigen wir unseren alten gespeicherten Inhalt zuerst dem Benutzer und dann holen wir es von Web-Service und speichern in Benutzer-Standard und dann Tabelle erneut laden.

Für oben genannten Betrieb, ich bin in einigen Fällen mit Inhaltsgrößenproblem für Tabelle, Flackern Problem und "unfähig zu laden" Nachricht konfrontiert.

Jetzt suchen Sie nach unten Code, ich mache einen Web-Aufruf in unten-Methode und nach der Antwort von Web-Service, ich nur Handle Abschluss Handler.

- (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]; 
} 

Also bitte teilen Sie Ihre Erfahrungen und Ideen mit mir.

+0

Nur um klar zu sein, rufen Sie Ihren Web-Service, und Sie rufen nicht den Completion-Handler, bis dieser Anruf beendet ist? –

+0

Ja, ich mache das gleiche .. Ich rufe Web-Service auf und nach der Fertigstellung des Dienstes vervollständige ich es mit dem Completion-Handler. –

+0

Eigentlich muss ich jedes Mal einen Web-Service-Aufruf machen, um meine neuesten Ereignisse für die Kunden abzurufen, aber bis ich sie abrufe, versuche ich, die zuvor abgerufenen Daten den Kunden zu zeigen. Es besteht also keine Möglichkeit, dass das Bildschirm flackert. Ich möchte die Ansicht mit neuen Inhalten ohne irgendwelche Nebenwirkungen aktualisieren. –

Antwort

2

Endlich hatte ich den Weg, um das Problem zu lösen. Bitte sehen Sie sich den folgenden Code an.

In viewDidLoad() -Methode habe ich gerade die bevorzugte Inhaltsgröße der Ansicht auf die Grundhöhe, die ich beim Start benötigen, um meine Ansicht von unten anzuzeigen, und dann habe ich einen Web-Service-Aufruf zum Abrufen der Daten. Nach dem Abrufen der Daten habe ich erneut die bevorzugte Inhaltsgröße der TodayWidget-Ansicht festgelegt.

-(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)); 
    } 

Ich habe die obigen Schritte gefolgt Probleme zu lösen in Bezug auf „Kann nicht geladen werden“ & „Bildschirm flackert“ mit dem Heute-Erweiterung.

+0

Toller Ansatz, das Ziel für mich war "self.view.frame.size.width" –

4

Im Allgemeinen sah ich die Meldung "Kann nicht geladen werden", wenn es einen Absturz im Widget gab. Das Widget versucht sich selbst zu laden und wenn es wiederholt abstürzt zeigt es nur die Meldung "Kann nicht geladen werden". Debuggen Sie Ihr Widget und stellen Sie sicher, dass es nichts zum Absturz bringt

+3

Ich hatte meine Probleme im Widget behoben, aber es zeigte immer noch "unfähig zu laden". Es stellte sich heraus, dass iOS nicht einmal versucht hat, das Widget zu laden, wenn es oft genug abgestürzt ist. Ich musste das Telefon neu starten und dann wurde es geladen. Danke für den Tipp! – user3099609