2012-02-17 57 views
2

我正在從plist文件讀取數組。當我迭代數組時,我將每個字符串保存到數據結構的相應部分。當我到達BOOL變量並嘗試使用boolForKey從數組中提取它時,我得到一個未被識別的選擇器錯誤。boolForKey無法識別的選擇器錯誤iOS

下面是一些代碼:

for(int i = 0; i<myArray.count;i++){ 

[myDataStructure setName:[[myArray objectAtIndex:i] objectForKey:NAMEVAR_KEY]]; 
//works fine 
.... 
[myDataStructure setABoolVar:[[myArray objectAtIndex:i] boolForKey:BOOLVAR_KEY]]; 
//crash 
.... 
} 

在數據結構中的屬性是這樣的: @property(非原子,強)的NSString *名稱; @property(nonatomic)BOOL aBoolVar;

//synthesized etc.... 

在plist中,屬性被列爲Boolen,如果我使用objectForKey,我得到一個警告但它不會崩潰。

任何想法?

這是XML

<dict> 
<key>Root</key> 
<array> 
    <dict> 
     <key>name</key> 
     <string>Bobby</string> 
     <key>aBoolValue</key> 
     <true/> 

    </dict> 
.... 
    </array> 
</dict> 

....

從控制檯

2012-02-16 23:45:21.866 CSOTest4[1452:f803] -[__NSCFDictionary boolForKey:]: unrecognized selector sent to instance 0x6d296a0 
2012-02-16 23:45:21.867 CSOTest4[1452:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary boolForKey:]: unrecognized selector sent to instance 0x6d296a0' 
*** First throw call stack: 
(0x13c2052 0x1553d0a 0x13c3ced 0x1328f00 0x1328ce2 0x3980 0xdf64e 0xdec1c 0x10556d 0xefd47 0x106441 0x10645d 0x10645d 0x1064f9 0x46d65 0x46dac 0x17be6 0x188a6 0x27743 0x281f8 0x1baa9 0x12acfa9 0x13961c5 0x12fb022 0x12f990a 0x12f8db4 0x12f8ccb 0x182a7 0x19a9b 0x2618 0x2575 0x1) 
+0

請發表你得到 – UIAdam 2012-02-17 04:44:43

回答

15

NSDictionary中沒有一個叫boolForKey方法。您必須先使用objectForKey,這會給你一個NSNumber,然後在NSNumber上調用boolValue

BOOL myBool = [[[myArray objectAtIndex:i] objectForKey:BOOLVAR_KEY] boolValue]; 

或把它分解成塊:

NSDictionary myDictionary = [myArray objectAtIndex:i]; 
NSNumber myNumber = [myDictionary objectForKey:BOOLVAR_KEY]; 
BOOL myBool = [myNumber boolValue]; 
+0

這是好得多,我upvoted它。 – 2012-02-17 05:42:04

+0

這個人也工作 – 2012-02-17 05:42:33

+0

這兩個解決方案的工作,我希望我能分裂信貸。現在它是有道理的,爲什麼我得到一個選擇器錯誤,但編譯好,沒有警告,但。那是我失去的那部分。有時似乎如果代碼編譯沒有警告它會起作用。情況並非總是如此。 – 2012-02-17 05:45:33

0

你應該在你的PLIST布爾是YES,而不是真實的嗎?

這工作

[myDataStructure setABoolVar:([(NSDictionary*) 
     [myArray objectAtIndex:i]valueForKey:BOOLVAR_KEY]== 
             [NSNumber numberWithBool:YES]?YES:NO)]; 
+0

現在它被設置爲YES錯誤的確切文字,讓我試試TRUE。 – 2012-02-17 04:54:44

+0

沒有做任何事情,當你在xcode上輸入TRUE時,它自動使它成爲YES。但我認爲這是巧妙的嘗試無論如何 – 2012-02-17 04:55:55

+0

嘗試投射數組結果作爲NSDictionary [myDataStructure setABoolVar:[(NSDictionary *)[myArray objectAtIndex:i] boolForKey:BOOLVAR_KEY]]; – 2012-02-17 05:02:33

相關問題