2011-01-09 11 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

NSCodingプロトコルを実装していないオブジェクトがuserInfo辞書にあるように聞こえます。通知が発生したときにアプリが実行されていない可能性があるため、その辞書のすべてが 'ディスク'に書き込まれる必要があります。そこにシリアル化できないものがある場合、これが結果です。

+0

実際には、私はfetchedObjectsにオブジェクトを持っています。私がしたいのは、textbodyと呼ばれるキーから値を取得するだけです。しかし、私はそれをどうやって行うのか本当に迷っています。私が実際にやってみたいのは、fetchedObjectsに含まれている各オブジェクトのtextbody(文字列である)の値を含むUILocalNotificationを作成することです。 –

+0

私はちょうどnoobであり、私はNSDictionariesのクラス参照上に私の頭脳をラッキングしているが、それを行う方法を把握することはできません。誰かが助けることができれば、それは非常に高く評価されるだろう。 –

+0

[fetchedObjects valueForKeyPath:@ "textbody"]を試すと、オブジェクトのすべてのtextbodyプロパティを含むNSArrayが取得されます。 – Jilouc

10

実際、NSCoding準拠のオブジェクトを使用していても、UILocalNotificationはsetUserInfoの呼び出し時にNSInvalidArgumentExceptionをスローします。 UILocalNotificationは、Property List Programming Guideで指定されたストックオブジェクトだけが許される、プロパティリスト型のより厳密な解釈を明らかに保持しているようです。これを回避するには、NSKeyedArchiverを使用してカスタムNSCoding準拠のオブジェクトをNSDataインスタンスにシリアル化します。これは、userInfo辞書のUILocalNotificationに安全に渡すことができます。

+2

あなたが言及した 'NSKeyedArchiver'アプローチの例を教えてください。 – p0lAris

関連する問題