【问题标题】:Retrieve empty array from Parse error从解析错误中检索空数组
【发布时间】:2014-09-29 20:53:14
【问题描述】:

在我的应用中,用户可以查看自己的统计信息。我从 Parse 中检索一个数组,如下所示:

...
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    userArray = [objects valueForKey:@"myArray"];
}]; 

当数组实际上包含某些内容时,代码可以正常工作...但是如果没有任何内容保存到 Parse.com 中的数组中,我会收到错误..

示例: 我运行这段代码来测试:

NSLog(@"%lu", (unsigned long)[[userArray objectAtIndex:0] count]);

当数组包含某些内容时,它会记录正确的数字(有效)。但是当数组为空时,我得到这个错误:

"-[NSNull count]: unrecognized selector sent to instance 0x199084fe0"

我不知道发生了什么。。有人知道发生了什么吗?

【问题讨论】:

    标签: ios xcode cocoa-touch parse-platform nsarray


    【解决方案1】:

    您得到的不是空数组,而是NSNull。您可以阅读更多关于差异的信息here

    对 NSNull 的测试很简单。考虑用 nil 替换不是 NSArrays 的值。

    id myArray = userArray.firstObject;
    myArray = [myArray isKindOfClass:[NSArray class]] ? myArray : nil;
    NSLog(@"%i", [myArray count]); //will log 0 because myArray is nil
    

    【讨论】:

    • 那么这到底是在做什么呢?它对我有什么帮助?我仍然得到同样的错误..
    • 你为什么不测试它是否为空?像这样:id object = myArray[0];// similar to [myArray objectAtIndex:0] if(![object isEqual:[NSNull null]]) { //do something if object is not equals to [NSNull null] }
    • 如果您更喜欢在代码中包含条件块,我想您也可以这样做...
    • 你能看看我自己对这个问题的回答吗?
    【解决方案2】:

    我发现这段代码可以帮助解决我的问题:

    id object = userArray[0];
    
    if([object isEqual:[NSNull null]]) {
        NSLog(@"Array is empty");
    }
    

    使用起来安全吗?

    【讨论】:

    • 我显然没有你那么先进,但我想我现在会寻求我的解决方案.. 不过还是谢谢!
    • 另外,当您得到不是 NSNull 的内容时,这不会捕获案例。就像NSDictionary 或其他你不期待的东西。这就是为什么我使用isKindOfClass: 来检查它是否是NSArray
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多