尝试将addObject添加到NSMutableArray时获取EXC_BAD_ACCESS

时间:2010-08-29 18:10:52

标签: iphone nsmutablearray

我有以下代码:

NSInteger phoneCount = ABMultiValueGetCount(phones);
NSMutableArray *phoneKeys = [[[NSMutableArray alloc] init] autorelease];
 NSMutableArray *phoneKeyValues = [[[NSMutableArray alloc] init] autorelease];

 for(CFIndex i=0; i < phoneCount; i++) {
  //NSString *label = [(NSString *)ABMultiValueCopyLabelAtIndex(phones, i) autorelease];
  NSString *phone = [(NSString *)ABMultiValueCopyValueAtIndex(phones, i) autorelease];
  NSString *phoneIndex = [[[NSNumber alloc] initWithInt:ABMultiValueGetIdentifierAtIndex (phones, i)] autorelease];
  [phoneKeys addObject:phoneIndex]; // it breaks on this line
 }

NSLog(@"Count: %@ %@", [phoneKeys count], [phoneKeyValues count]);

当我尝试[phoneKeys addObject:phoneIndex]时,我知道为什么会得到EXC_BAD_ACCESS?

提前致谢

2 个答案:

答案 0 :(得分:1)

NSLog(@"Count: %@ %@", [phoneKeys count], [phoneKeyValues count]);

-count方法返回一个NSUInteger,它只是一个unsigned int。但是%@只能打印Objective-C对象,而不能打unsigned int。这会导致异常。

要打印unsigned int,您需要使用%u代替%@

NSLog(@"Count: %u %u", [phoneKeys count], [phoneKeyValues count]);

答案 1 :(得分:0)

每当这发生在我身上时,即它破坏的代码有适当的内存管理,并且根据内存管理指南但仍然崩溃,结果是由于过度释放somwehere其他,我会做一个完整的审查寻找泄漏的代码,我建议你使用泄漏工具:

在X-Code中运行&gt;使用性能工具运行&gt;泄漏

同时查看此技术问答:http://developer.apple.com/mac/library/qa/qa2004/qa1367.html