我的iPhone應用程序總是崩潰,我已經在過去的一週血腥範圍縮小到這一行:Objective-C正確地複製一個NSArray?
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
對象也不做任何其他處理,從而導致應用程序崩潰。這怎麼可能?
請出示你在那裏訪問的結果。 – 2010-02-25 23:46:35
查看上面的修改 – kbanman 2010-02-26 11:43:05