Próbuję utworzyć rozszerzenie Today (inaczej Widget) dla mojej istniejącej aplikacji iOS 7+. W Symulatorze iOS wszystko działa dobrze (przez większość czasu), ale na moich urządzeniach widżet jest pusty - pokazywany jest tylko nagłówek/nazwa, ale bez zawartości.Dzisiejszy widget nie zawiera żadnych treści na urządzeniu z iOS 8
Znalazłem kilka wątków dotyczących podobnych problemów, ale wszystkie były związane z niektórymi problemami z init w aplikacjach Swift. Używam Objectiv-c Not Swift.
To co zrobiłem:
- dodał nowy cel Dziś Rozszerzenie do mojej aplikacji. Odpowiedni schemat również został utworzony automatycznie.
- Problem występuje również, gdy używany jest niezmieniony domyślny widget. Dodałem tylko metody init, aby sprawdzić, czy są one poprawnie wywoływane. Widżet powinien więc pokazywać domyślną etykietę
Hello World
.
Jest to kod:
@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
Przy wyborze schematu widget i uruchomienie go w symulatorze widget jest prawidłowo wyświetlany po wybraniu „Today” jako pojemnika. Dodatkowo zalogowany jest initWithCoder
.
Podczas pierwszego uruchomienia urządzenia wszystko działa zgodnie z oczekiwaniami: Wyświetlane są ekrany Today (Dzisiaj) i widżety są wyświetlane. Mój widget również, ale bez żadnych treści.
Następnie Xcode pokazuje następujący komunikat:
Utracono połączenie z "Device Test" - przywracanie połączenia do "Test Device" i uruchom ponownie "com.example.MyApp.Widget", lub jeśli "com.example.MyApp.Widget" nadal działa, możesz dołączyć do niego przez wybierając Debug> Dołącz do procesu> com.example.MyApp.Widget.
Nic nie jest rejestrowane, zakładam, że jest to spowodowane utraconym połączeniem. Ale dlaczego widget jest pusty?
Sprawdziłem logi urządzeń, ale nie było awarii. Problem jest taki sam na moim iPhone 6 (iOS 8.0) i iPad Air 2 (iOS 8.1)
Dziękuję bardzo!
Mówiąc dokładniej, nie jest to problem z systemem iOS 8 w ogóle, ponieważ działa poprawnie na telefonie iPhone 4S. Problem dotyczy urządzeń zawierających pełne procesory 64-bitowe, to znaczy 5S i nowsze oraz iPad Air i nowsze .. – Markus