2011-03-31 7 views
0
NSLog(@"move report - %@", [eventToArchive valueForKey:@"archived"]); 
if (![eventToArchive valueForKey:@"archived"]) { 
    .... 

上記のコードブロックはのNSLogがなぜこのIFブロックはNSManagedObjectブール値プロパティをチェックした後に入力されないのですか?

move report - 0 

それが実行されるすべての単一の時間を返していても、入力されませんさん?

は私が

if (![NSNumber numberWithBool:[eventToArchive valueForKey:@"archived"]]) { 

、のような何かをする必要がありますか?

答えて

0

これは動作するはずeventToArchiveのアーカイブプロパティがBOOLの場合は、キー値コーディングが自動的にあなたのためのNSNumberにそれを変換しますので、

if (![[eventToArchive valueForKey:@"archived"] boolValue]) 

BOOLVALUEがNSString sおよびNSNumber秒で動作します。

0

「アーカイブ済み」はNSManagedObjectのサブクラスのブール値プロパティであると仮定します。

if(![eventToAcrhive.archived boolValue]) { 
    // not archived 
} 
1

条件ブロックが入力されないことを理由は、-valueForKeyです:ポインタを言うことである、idを返します。しかし、それはBOOLのように使用しているので、-valueForKey:nilを返すと、ブロックに入る唯一の方法です。

オブジェクトの書式指定子である%@を使用したため、logステートメントで値として「0」が出力されます。これは、ポインタが必要で、ポインタが指すオブジェクトの説明を出力します。あなたはおそらくNSNumber *を与えており、そのオブジェクトが表す値を適切に出力しています。

上記の2つの回答は、-valueForKey:から取得するNSNumberからBOOL値を取得するために-boolValueメソッドを使用する必要があることを指摘しています。

関連する問題