【发布时间】: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