我有以下代码:
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?
提前致谢
答案 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