在NSMutableArray中获取字符串:为什么它不起作用?
-
05-07-2019 - |
题
我有错误 - [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,否则没有声明属性的含义。
不隶属于 StackOverflow