【问题标题】:retrieving string from NSDictionary从 NSDictionary 检索字符串
【发布时间】:2025-11-24 02:05:01
【问题描述】:

我正在开发以下功能:

-(void)logResults:(NSDictionary *)results {
    NSMutableString *logString = [[NSMutableString alloc]init];
    for (NSString *key in results) {
        if([key isEqualToString:@"index"]){
            NSString *string = [[NSString alloc]initWithString:[results objectForKey:key]];
            string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
            [results setValue:string forKey:key];
        }
        NSLog(@"KEY: %@, VALUE: %@", key, [results objectForKey:key]);
        [logString appendFormat:@"|%@ = %@ \n", key, [results objectForKey:key]];
    }
    self.logInfo.text = [logString stringByAppendingString:self.logInfo.text];
}

问题在于 if,我收到以下错误:[_NSArrayM length] unrecognised sel...

我首先尝试对 if 的工作使用以下表达式:

//[results setValue:[((NSString *)[results objectForKey:key]) stringByReplacingOccurrencesOfString:@"\n" withString:@""] forKey:@"index"];

导致:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[__NSArrayM stringByReplacingOccurrencesOfString:withString:]

【问题讨论】:

  • string 可能是 NSArray,因此是 [__NSArrayM stringByReplacingOccurrencesOfString:withString:]。检查string 是否真的得到了你想要的字符串。
  • @user1813076 是。行:[logString appendFormat:@"|%@ = %@ \n", key, [results objectForKey:key]];一直工作正常。我这样做只是为了修剪我已经正确处理的字符串。顺便说一句,即使是最初的 NSString *string = [[NSString alloc]initWithString:[results objectForKey:key]];崩溃,我觉得这很奇怪,因为第一次提到的表达式(在此评论中)有效,而且它们都在处理字符串。我也尝试过对 NSString 进行强制转换
  • 到底在哪一行崩溃,代码块的确切错误信息是什么?
  • @DevilInDisguise 请显示您的 NSDictionary 数据,它的问题是您从中获取错误的数据。
  • @luk2303 NSMutableString *string = [[NSMutableString alloc]initWithString:(NSString *)[results objectForKey:key]];此初始行会导致崩溃。提到我上面的评论,我认为这很奇怪,因为后一种表达方式有效。错误:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM 长度]:无法识别的选择器发送到实例 0x17005ffb0”

标签: ios objective-c


【解决方案1】:

您的[results objectForKey:key]]; 正在返回一个导致所有崩溃的数组。要从数组中创建 NSString,请使用 [results valueForKey:@"description"] componentsJoinedByString:@""];

【讨论】:

  • 所以原来我正在解析的json是一个字符串,认为它是一个字符串,我可以只处理对象和数组而不是进行字符串分析lol ....谢谢帮助!