Sto cercando di creare un'estensione di oggi (aka Widget) per la mia app iOS 7+ esistente. In iOS Simulator tutto funziona alla grande (il più delle volte), ma sui miei dispositivi il widget è vuoto: solo l'intestazione/nome viene mostrato ma nessun contenuto.Il widget di oggi non ha contenuto sul dispositivo iOS 8
Ho trovato diversi thread che trattano problemi simili ma erano tutti relativi ad alcuni problemi di init nelle app Swift. Sto usando Objectiv-c non Swift.
Questo è quello che ho fatto:
- Aggiunto un nuovo obiettivo Oggi Estensione a mio app. Anche lo schema corrispondente è stato creato automaticamente.
- Il problema si verifica anche quando viene utilizzato il Widget predefinito invariato. Ho solo aggiunto i metodi init per vedere se sono chiamati correttamente. Quindi il widget dovrebbe mostrare l'etichetta predefinita
Hello World
.
Questo è il codice:
@interface TodayViewController() <NCWidgetProviding>
@end
@implementation TodayViewController
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self)
NSLog(@"initWithCoder");
return self;
}
- (id)init {
self = [super init];
if (self)
NSLog(@"init");
return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
NSLog(@"initWithNibName");
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (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
completionHandler(NCUpdateResultNewData);
}
@end
Quando si seleziona lo schema di widget e in esecuzione nel simulatore il widget viene visualizzato correttamente dopo aver selezionato "Oggi" come contenitore. Inoltre, viene registrato initWithCoder
.
Quando si esegue il dispositivo in un primo momento, tutto funziona come previsto: Le schermate Oggi vengono visualizzate e vengono visualizzati i widget. Anche il mio widget, ma senza alcun contenuto.
Poi Xcode mostra il seguente messaggio:
collegamento perso a "Device Test" - Ripristinare il collegamento a "Test Device" ed eseguire "com.example.MyApp.Widget" ancora una volta, o se "com.example.MyApp.Widget" è ancora in esecuzione, è possibile connettersi ad esso tramite selezionando Debug> Collega a Processo> com.example.MyApp.Widget.
Non viene registrato nulla, presumo che questo sia dovuto alla connessione persa. Ma perché il widget è vuoto?
Ho controllato i registri del dispositivo ma non ci sono arresti anomali. Il problema è lo stesso sul mio iPhone 6 (iOS 8.0) e iPad Air 2 (iOS 8.1)
Grazie mille!
Per essere precisi, questo non è un problema con iOS 8 in generale, perché funziona su iPhone 4S bene. Il problema è con i dispositivi che contengono processori a 64 bit completi, significa 5S e più recenti e iPad Air e più recenti .. – Markus