在NSMutableArray中获取字符串:为什么它不起作用?

时间:2009-07-29 23:01:51

标签: objective-c string nsmutablearray nsmutabledictionary

我有错误 - [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]);

4 个答案:

答案 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,否则没有声明属性的含义。