2011-01-09 127 views
3

你能幫我嗎?UILocalNotification崩潰

我設置了一個UILocalNotification,當我嘗試設置它的userInfo字典時,它崩潰。 fetchedObjects包含88個對象。

下面是代碼:

NSDictionary* myUserInfo = [NSDictionary dictionaryWithObject: fetchedObjects forKey: @"textbody"]; 

UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
if (localNotif == nil) 
     return; 

// défining the interval 
NSTimeInterval oneMinute = 60; 

localNotif.timeZone = [NSTimeZone localTimeZone]; 
NSDate *fireDate = [[NSDate alloc]initWithTimeIntervalSinceNow:oneMinute]; 
localNotif.fireDate = fireDate; 

localNotif.userInfo = myUserInfo; //this is the line that crashes the app 
    [fetchedObjects release]; 

和控制檯給了我這樣的:

Property list invalid for format: 200 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unable to serialize userInfo: (null)' 

任何想法?

回答

7

聽起來像你的userInfo字典中沒有實現NSCoding協議的對象。該字典中的所有內容都必須能夠寫入「磁盤」,因爲當通知觸發時,您的應用可能不會運行。如果那裏有東西不能被序列化,那就是結果。

+0

實際上,我在fetchedObjects中有對象,我想要做的就是從名爲textbody的鍵中檢索一個值。但是我對如何做到這一點感到非常失望。我想要做的實際上是爲包含在fetchedObjects中的每個對象創建一個包含textbody值(這是一個字符串)的UILocalNotification。 – 2011-01-09 11:18:37

+0

我只是一個noob,並不知道如何做到這一點,雖然我絞盡腦汁對NSDictionaries的類參考。如果有人可以幫助,那將非常感激。 – 2011-01-09 11:27:08

10

實際上,即使使用符合NSCoding的對象,UILocalNotification在調用setUserInfo時也會引發NSInvalidArgumentException。 UILocalNotification顯然保留了對屬性​​列表類型的更嚴格的解釋,其中只允許屬性列表編程指南中指定的股票對象。您可以通過使用NSKeyedArchiver將您的自定義NSCoding兼容對象序列化爲NSData實例來解決此問題,該實例可以安全地傳遞給userInfo字典中的UILocalNotification。