【发布时间】:2026-02-08 15:30:02
【问题描述】:
我的 iPhone 应用程序不断崩溃,在过去该死的一周里,我已将其范围缩小到这一行:
NSArray *fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
我从上面得到了正确的结果,但是应用程序在访问它后崩溃了 (EXC_BAD_ACCESS)。
如何复制fetchResults 的内容以便我可以使用它?
我试过了
NSArray *retVal = [[NSArray alloc] initWithArray:fetchResults];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults copy]];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults retain]];
但唯一不会让应用崩溃的是
NSArray *retVal = [[NSArray alloc] initWithArray:nil];
有人可以帮我吗?我想我需要学习 Obj-C 内存管理方面的课程。
编辑: 下面是一个更完整的崩溃代码示例:
NSArray *fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
NSMutableArray *retVal = [NSMutableArray arrayWithCapacity:0];
for(Job *job in fetchResults){
//NSLog(@"dev: %@",job.lastmod_device);
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[job.jobkey copy], @"entitykey",
[NSNumber numberWithInt:[job.lastmod_device timeIntervalSince1970]], @"job_lastmod_device",
[NSNumber numberWithInt:[job.lastmod_server timeIntervalSince1970]], @"job_lastmod_server",
[NSNumber numberWithInt:[job.customer.lastmod_device timeIntervalSince1970]], @"customer_lastmod_device",
[NSNumber numberWithInt:[job.customer.lastmod_server timeIntervalSince1970]], @"customer_lastmod_server",
[NSNumber numberWithInt:[job.productionschedule_lastmod_device timeIntervalSince1970]], @"productionschedule_lastmod_device",
[NSNumber numberWithInt:[job.productionschedule_lastmod_server timeIntervalSince1970]], @"productionschedule_lastmod_server", nil];
//NSLog(@"dict: %@", dict);
[retVal addObject:dict];
}
return retVal;
以及调用这个方法的代码:
NSArray *arr2 = [self retrieveJobs];
(就是这样;我什至从不使用变量)
编辑 2:
即使只是用一个空的 for 循环遍历获取的结果并且对 fetchResults 对象不做任何其他事情,也会使应用程序崩溃。这怎么可能?
【问题讨论】:
-
请显示您访问结果的位置。
标签: iphone objective-c iphone-sdk-3.0