objective-c 空 NSArray 错误

Posted

技术标签:

【中文标题】objective-c 空 NSArray 错误【英文标题】:objective-c empty NSArray error 【发布时间】:2011-09-15 16:10:25 【问题描述】:

我正在使用 JSON 将数据解析为 NSArray 'courseArray'。然后我使用 NSPredicate 过滤这些数据并将其存储到“行”中。问题是,我不知道如何确定“行”是否为空。例如:如果记录存在,行将包含适当的对象,但如果记录不存在,则应用程序崩溃(同样当我使用 NSLog 查看数组的内容时,它的空白,我相信它应该说它的 nil?如果没有对象)。我怎样才能解决这个问题?

if (dict)

    courseArray  = [[dict objectForKey:@"lab"] retain];
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"labNumber== %@",labSelected]; //filter
    rows = [[courseArray filteredArrayUsingPredicate:predicate]retain];


[jsonreturn release];

self.formattedTextView.opaque = NO;
self.formattedTextView.backgroundColor = [UIColor clearColor];

NSLog(@"array %@",rows);

 **NSDictionary *currentSelection = [rows objectAtIndex:0];** (app crashes at this line - [NSArray objectAtIndex:]: index 0 beyond bounds for empty array')
 NSString *labNumber = [currentSelection objectForKey:@"labNumber"];

【问题讨论】:

【参考方案1】:

-objectAtIndex: 将在指定索引处没有对象时引发异常。如果rows 为空,则索引 0 处不会有对象,因此会出现异常。由于您没有捕获异常,结果是您的应用程序被终止。

您可能希望将 [rows count] 与 0 进行比较,以检查其中是否有东西,如果没有,则做出适当的反应。

【讨论】:

我想了这么多,但我不确定如何停止我尝试过的错误 if([rows count]==0) 但它不起作用,也尝试过 "if(rows!=nil) 你的应用程序不能在[rows objectForIndex:0] 行中引发异常,如果你已经包装了它,那么除非[rows count] 不为零,否则你永远不会得到它。是否有可能是其他一些错字或小缺陷混淆了这个问题?【参考方案2】:

尝试if([courseArray count] > 0) 也可以在这里提供帮助的另一种方法是

[courseArray containsObject:(id)]

【讨论】:

以上是关于objective-c 空 NSArray 错误的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 正确复制一个 NSArray?

按二维排序 NSArray - Objective-C

在 Objective-c 中访问二维 NSArray 中的值

Objective-C中NSArray和NSMutableArray是如何使用的?

Objective-C之NSArray

如何在 Objective-C 中从 mysql 数据库中填充 NSArray?