2012-02-17 74 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

相关问题