2

我有错误 -[NSCFString stringValue]: unrecognized selector sent to instance 0x1578c when execution this code 我不明白我在做什么 错误名称是 NSString

self.searchValues= [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
   [searchValues addObject: [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Name",@"Label",self.name,@"Value",nil]];
NSLog(@"Array value : %s",[[[searchValues objectAtIndex:0] objectForKey:@"Value"] stringValue]);
4

4 回答 4

3

首先,您可以删除 [... stringValue] 消息。没有必要,该对象已经是一个字符串。其次,对于 NSString 对象,您应该使用 %@ 而不是 %s。

注意: %@ 适用于任何对象,就此而言。尝试

NSLog(@"Array: %@", searchValues);

相信我,值得一试。

于 2009-07-29T23:05:21.777 回答
2

NSString 上没有“stringValue”方法,因此出现错误。

如果你真的想要一个 C 字符串的值,你想要的方法是 UTF8String。但是,对于您的日志记录案例,您应该将 %s 更改为 %@,并直接记录 NSString 对象。

于 2009-07-29T23:06:10.357 回答
1

stringValue在这种情况下不需要使用(编辑:它实际上是一个错误,正如其他人发布的那样,因为NSString没有stringValue方法)。

从您的字典中出来的对象已经是一个NSString. 您应该做的是允许NSLog函数将对象作为适当的可可对象处理。代码是%@, not %s, 因为%s是 C 风格的字符串。

以下是它的外观:

self.searchValues = [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
{
    [searchValues addObject: [NSMutableDictionary
           dictionaryWithObjectsAndKeys:@"Name", @"Label",
                                        self.name,@"Value",
                                       nil]];

    NSLog(@"Array value: %@", [[searchValues objectAtIndex:0]
                                 objectForKey:@"Value"]);
}
于 2009-07-29T23:08:28.260 回答
0

如果您有 name 变量的属性,则在对其执行任何操作时使用 self.name ,否则没有声明属性的意义。

于 2012-10-10T13:32:49.667 回答