【问题标题】:getting string in NSMutableArray : Why it doesn't work?在 NSMutableArray 中获取字符串:为什么它不起作用?
【发布时间】:2009-07-29 23:01:51
【问题描述】:

执行此代码时出现错误 -[NSCFString stringValue]: unrecognized selector sent to instance 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]);

【问题讨论】:

    标签: objective-c string nsmutablearray nsmutabledictionary


    【解决方案1】:

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

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

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

    相信我,值得一试。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        从您的字典中出来的对象已经是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"]);
        }
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-04
            • 1970-01-01
            • 2023-03-10
            相关资源
            最近更新 更多