【问题标题】:Creating Objects from template crashes with error: "NSInvalidArgumentException"从模板创建对象崩溃并出现错误:“NSInvalidArgumentException”
【发布时间】:2014-11-19 01:00:30
【问题描述】:

此函数旨在获取 JSON 并根据作为参数发送的对象创建一个对象数组:

+ (NSArray *)Object: (id) object FromJSON:(NSData *)objectNotation error:(NSError  **)error
{
    NSError *localError = nil;
    NSArray *parsedObject = [NSJSONSerialization JSONObjectWithData:objectNotation options:0 error:&localError];

    if (localError != nil) {
        *error = localError;
        return nil;
    }

    NSMutableArray *output = [[NSMutableArray alloc] init];

    NSArray *results = [parsedObject valueForKey:@"results"];
    NSLog(@"Count %lu", (unsigned long)results.count);

    for (NSArray *eventDic in results) {
        object = [[[object class] alloc] init];

        for (NSString *key in eventDic) {
            if ([object respondsToSelector:NSSelectorFromString(key)]) {
                [object setValue:[eventDic valueForKey:key] forKey:key];
            }
        }

        [output addObject:object];
    }

    return output;
}

但是每次我运行它都会崩溃。我收到此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x1100c3ce0'

我是 iOS 编程新手,不知道这意味着什么。

【问题讨论】:

  • 设置exception breakpoint 并查看堆栈,看看是否有帮助。目前尚不清楚您要做什么。您能否举例说明您的输入和预期输出?
  • 对于这个输入:Object:[Event] FromJSON:JSON,它应该返回一个Event对象数组。
  • 使用断点,发现结果数组没有任何NSDictionary Objects,它有3个NSNull *
  • 您的示例 JSON 有一个数组作为根对象。所以parsedObject 应该是NSArray,是吗?
  • 有道理,我已经更新了问题中的代码,但它仍然给了我一个序列化的 3 个空对象。

标签: ios objective-c crash dynamic-typing


【解决方案1】:
 NSArray *parsedObject = [NSJSONSerialization JSONObjectWithData:objectNotation options:0 error:&localError];

如果您不关心生成的字符串的可读性,则传递 0

如果要将对象解析为 NSArray,请将选项更改为 NSJSONReadingMutableContainers

NSDictionary *dic_JSON = [NSJSONSerialization JSONObjectWithData: jsonData
                                options: NSJSONReadingMutableContainers
                                  error: &error];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多