我有错误 - [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]);
答案 0 :(得分:3)
首先,您可以删除[... stringValue]消息。没有必要,该对象已经是一个字符串。其次,对于NSString对象,你应该使用%@而不是%s。
注意:对于任何对象,%@都适用。尝试
NSLog(@"Array: %@", searchValues);
相信我,值得一试。
答案 1 :(得分:2)
NSString上没有“stringValue”方法,因此错误。
如果你真的想要将值作为C字符串,那么你想要的方法是UTF8String。但是,对于您的日志记录案例,您应该只将%s更改为%@,并直接记录NSString对象。
答案 2 :(得分:1)
在这种情况下无需使用stringValue
(编辑它实际上是错误,正如其他人发布的那样,因为NSString
没有stringValue
1}}方法)。
词典中出现的对象已经是NSString
。你应该做的是允许NSLog
函数将对象作为一个合适的可可对象来处理。其代码为%@
,而非%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"]);
}
答案 3 :(得分:0)
如果你有name变量的属性,那么在对它执行任何操作时使用self.name,否则没有声明属性的含义。