我有错误 - [NSCFString stringValue]:执行此代码时发送到实例0x1578c的无法识别的选择器 我不明白我做错了什么 name是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]);
有帮助吗?

解决方案

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

注意:对于任何对象,%@都适用。尝试

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

相信我,值得一试。

其他提示

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

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

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

字典中出现的对象已经是 NSString 。你应该做的是允许 NSLog 函数将对象作为一个合适的cocoa对象来处理。代码是%@ ,而不是%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"]);
}

如果你有name变量的属性,那么在对它执行任何操作时使用self.name,否则没有声明属性的含义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top