2011-07-07 72 views
0

我在我的UITableViewController子類下面的方法:程序接收到的信號:EXC_BAD_ACCESS

-(void)populateDataStorage{ 

NSString *path = [[NSBundle mainBundle] pathForResource:@"FakeData" ofType:@"plist"]; 

if(path){ 
    NSArray *plistData = [[NSArray alloc] initWithContentsOfFile:path]; 
    NSEnumerator *enumerator = [plistData objectEnumerator]; 

    NSArray *personResults; 

    Photo *photo; 
    Person *person; 

    id currItem = [enumerator nextObject]; 

    while (currItem != nil) { 
     photo = (Photo *)[NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext: [[FlickrFetcher sharedInstance] managedObjectContext]]; 

     photo.name = [currItem objectForKey:@"name"]; 
     photo.path = [currItem objectForKey:@"path"]; 

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", [currItem objectForKey:@"user"]]; 

     personResults = [[FlickrFetcher sharedInstance] fetchManagedObjectsForEntity:@"Person" withPredicate:predicate]; 

     if ([personResults count] > 0) { 
      person = [personResults objectAtIndex:0]; 
     } 
     else { 
      person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[[FlickrFetcher sharedInstance] managedObjectContext]]; 
      person.name = [currItem objectForKey:@"user"]; 
     } 

     photo.person = person; 
     [person addPhotosObject:photo]; 

     NSLog(@"Photo %@ added for user %@", photo.name, person.name); 

     currItem = [enumerator nextObject]; 
    } 

    [plistData release]; 
} 

}

而且我把它在我的應用程序didFinishLaunchingWithOptions方法在我的AppDelegate,方法也是相同AppDelegate,當它被調用時,我得到它在調試時出現的錯誤,如果我不調試這條線,它將運行該方法並加載沒有問題。如果我根本不調試,它將不會調用該方法。

編輯:根據答案更改了代碼問題仍然保持不變,如果我只是運行沒有任何反應,但在調試時出現錯誤。當我調試整個方法時,不顯示錯誤。

回答

3

您致電NSLog正嘗試訪問person變量的name財產。但是,當你聲明你的person變量時,你沒有初始化它,所以它指向垃圾。你只在else子句中給它一個有效值,所以有時你的NSLog正在訪問一個未初始化的對象。

+0

我修改了代碼並更新了我的帖子,問題仍然存在 – 8vius

+0

您是如何修改代碼的?你可以添加更新的代碼到你的文章嗎? – highlycaffeinated

+0

我所做的是在if語句的兩種情況下設置person對象,以更正您所說的內容,這樣,當我訪問它的name屬性時,它總是設置爲 – 8vius

相關問題