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

나는 멍청한 놈일 뿐이지 만 NSDictionaries의 수업 참조에 두뇌를 기울이고 있지만 어떻게하는지 알아낼 수 없다. 누군가가 도울 수 있다면, 그것은 크게 감사 할 것입니다. –

+0

[fetchedObjects valueForKeyPath : @ "textbody"]을 시도하면 객체의 모든 textbody 속성을 포함하는 NSArray를 얻을 수 있습니다. – Jilouc

10

실제로 NSCoding 호환 객체를 사용하는 경우에도 UILocalNotification은 setUserInfo를 호출 할 때 NSInvalidArgumentException을 발생시킵니다. UILocalNotification은 속성 목록 프로그래밍 가이드에 지정된 주식 개체 만 허용되는 속성 목록 유형을보다 엄격하게 해석합니다. NSKeyedArchiver를 사용하여 사용자 정의 NSCoding 호환 객체를 NSData 인스턴스로 직렬화하여이 문제를 해결할 수 있습니다. NSData 인스턴스는 userInfo 사전의 UILocalNotification으로 안전하게 전달 될 수 있습니다.

+2

언급 한 'NSKeyedArchiver' 접근법의 예를 제공해 주시겠습니까? – p0lAris