2013-08-23 85 views
0
最小化應用程序時

,一切都很好,但是當我嘗試部署熱潮回事,這個錯誤 *終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「* - [__ NSArrayM insertObject:atIndex:]:對象不能是零」本地通知錯誤的iOS

-(void) applicationDidEnterBackground:(UIApplication *)application 
{ 
     NSDate *alertTime = [[NSDate date] dateByAddingTimeInterval:5]; 
     UIApplication* app = [[UIApplication sharedApplication] init]; 
     UILocalNotification* notifyAlarm = [[UILocalNotification alloc] init]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kAllNews]]; 

     NSError *error = nil; 

     NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; 

     NSError *jsonParsingError = nil; 

     sortArray = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; 

     if (notifyAlarm) 
     { 

     if ([[NSUserDefaults standardUserDefaults] objectForKey:@"news"]) 
     { 
      newsNew = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"news"]]; 
     } 

     if (newsNew.count > sortArray.count) { 

     notifyAlarm.fireDate = alertTime; 
     notifyAlarm.timeZone = [NSTimeZone defaultTimeZone]; 
     notifyAlarm.repeatInterval = 0; 
     notifyAlarm.soundName = @"Glass.aiff"; 
     notifyAlarm.alertAction = @"Gipoteza"; 
     notifyAlarm.alertBody = @"Добавлена новая новость"; 
     [app scheduleLocalNotification:notifyAlarm]; 
    } 
    } 
} 

回答

0

一對夫婦的建議:

首先;您是否嘗試將代碼放入applicationWillResignActive中?

爲什麼你在代碼中獲得對UIApplication的引用?您已經將該參數作爲該方法的參數...

嘗試在代碼中放置斷點以確切地查看發生此錯誤的位置。我猜想它發生在最後一行:[app scheduleLocalNotification:notifyAlarm],並且它發生是因爲你的notifyAlarm對象出於某種原因是零。使用你的調試器來遍歷代碼,看看該對象是否確實被設置。

另外;請注意,您的代碼在停用之前最多有5秒的時間,直到它被暫停。暫停時;沒有代碼可以運行。例如,如果您的NSURLConnection請求出於某種原因需要很長時間才能響應,那麼在代碼完成之前,您的應用程序將被暫停。