2014-10-20 1 views
2

Я пытаюсь получить оповещение всплывал с UIAlertController, но я получаю эту ошибку:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <States: 0x17557b90>.'UIAlertController бросает NSInvalidArgumentException

if([InAppPurchaseVerifier hasSubscription]){ 

    NSUInteger row = [indexPath row]; 
    NSDictionary *myDict = [[NSDictionary alloc] initWithDictionary:[self.fullList objectAtIndex:row]]; 

    NSString *state = [[NSString alloc] initWithString: [myDict objectForKey:@"0"]]; 
    NSString *stateDetails = [[NSString alloc] initWithString: [myDict objectForKey:@"1"]]; 

    OfficeInfo *anotherViewController = [[OfficeInfo alloc] initWithNibName:@"OfficeInfo" bundle:nil]; 
    anotherViewController.stateName = state; 
    anotherViewController.stateDetails = stateDetails; 

    [state release]; 
    [stateDetails release]; 

    [self.navigationController pushViewController:anotherViewController animated:YES]; 
    [anotherViewController release]; 
}else{ 
    UIAlertController* alert = [[UIAlertController init] alertControllerWithTitle:@"Subscription Needed" message:@"You need to subscribe in order to access that. If you already have a subscription you may need to restore it" preferredStyle:UIAlertControllerStyleAlert]; 
    [self presentViewController:alert animated:YES completion:nil]; // Error throws here 
} 
+1

'UIAlertController' доступен только в iOS 8. Возможно, вы пытаетесь запустить его на более ранней версии ОС? –

+0

Да, это должно быть. Я тестирую его на своем устройстве iOS 7 ... Таким образом, старая функция предупреждения обесценивается в 8, но мы должны будем использовать ее некоторое время. Хорошо знать! – AndyD273

+0

Да, у вас есть чек и ветка. Это хромает. Возможно, вы можете просто написать обертку. –

ответ

8

UIAlertController доступен только в прошивке 8. Для предыдущих версий, должен проверять и возвращать старый путь к коду, продолжать использовать устаревший API или писать счастливый маленький объект-оболочку.

+0

Спасибо за информацию. Несмотря на то, что он обесценился, любая проблема с использованием старого UIAlertView для iOS 7 и 8? – AndyD273

+1

Он по-прежнему будет работать. «Любая проблема» зависит от вашей личной толерантности к риску. Apple может отклонить вас за использование устаревших API в какой-то момент (с низким риском этого в моем опыте). Apple может удалить его в SDK-обновлении, а затем вы должны изменить свой код (средний риск, зависит от вашего графика доставки). Итак, действительно, просто загляните внутрь себя и посмотрите, какой ответ вытекает изнутри. –