这是我收到的错误消息:
ContactsWithPN - start loop
Program received signal: “0”.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")
以下是导致此问题的代码:
+(NSArray *) contactsWithPhoneNumbers{
NSArray *contacts = [ABContactsHelper contacts];
NSMutableArray *rv = [[NSMutableArray alloc] init];
NSLog(@"ContactsWithPN - start loop");
for (int i = 0; i< [contacts count] ; i++) {
ABContact * c = (ABContact*)[contacts objectAtIndex:i];
ABContact * fullContact = [ABContact contactWithRecordID:[c recordID]];
if ([[fullContact phoneArray] count] > 0) {
[rv addObject:fullContact];
}
}
NSLog(@"ContactsWithPN - end loop");
NSArray *ret = [[NSArray alloc] initWithArray:rv];
return ret;
}
在调用上述类方法的 View Controller 中,我添加了以下代码来查看是否发送了内存警告。他们不是!
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"InviteFriends - memory warning received");
}
观察结果: + 发现错误发生在不同的时间点 - 有时在索引 253,有时在 246。 + 仅发生在 iPhone 上 - 不在模拟器上(在模拟器上,有 < 5 个联系人)
最佳答案
您没有收到内存警告的事实并不意味着它没有被发送:内存警告被传递到主运行循环;当您的函数仍在运行时,它们不会被传递。
相反,请考虑查看手机控制台(Xcode->组织器->您的手机->控制台,或 iPCU 中的等效项)。如果它说“内存水平至关重要”并提到终止您的应用程序,那么您的内存就已经用完了。此外,当内存不足时,崩溃报告器会在被终止的进程旁边写入一个“内存不足”崩溃日志,并带有“抛弃”字样;您应该在管理器中看到这些。 (自从iOS 4的“多任务处理”以来,抛弃后台任务也发生了。)
如果这仅仅是由于大量自动释放对象造成的,您可以使用显式自动释放池在一定程度上缓解它:
for (int i = 0; i< [contacts count] ; i++) {
NSAutoreleasePool * pool = [NSAutoreleasePool new];
...
[pool drain]; pool = nil;
}
您的代码还泄漏了 ret
和 rv
。
关于iphone - 数据格式化程序暂时不可用,将在 'continue' 后重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843903/