2011-11-04 4 views
4

코어 데이터를 사용하여 데이터베이스에 노래 세부 정보를 입력하고 있습니다. 나는 이것을위한 3 개의 전망이있다. 첫째로 데이타베이스에있는 세부 사항을 저장하는 노래 이름 및 그것의 세부 사항보기를 선정하기위한 것이다. ... 제 3의 전망은 저장된 노래를 표시하기위한 것이다. 나의 App는 자료를 저장하고 때때로 예외를 제공하고있다.데이터 저장 중 코어 데이터 앱이 충돌합니다.

예외가 발생했을 때 발견되었습니다. 노래를 선택하고 데이터베이스에 저장하면 제대로 저장됩니다. 그러나 제가 처음으로 제 3의 관점으로 갈 때. Songlistviewcontroller 다음 열기 노래와 그것이 라인을 저장에 대한 예외를 제공 자세한 사항 저장하려고 ..

011-11-04 11 : 14 : 10.578 SongsWithLyrics [259 : 207] * - [SongsListViewController controllerDidChangeContent : ] : 메시지 할당이 해제 된 경우 여기 0x5b73b50

로 전송 내 코드는 제가 문제에 붙어

//save song details 
- (IBAction)saveDetails:(id)sender { 

    NSError *error; 
    self.song = [NSEntityDescription insertNewObjectForEntityForName:@"Song" inManagedObjectContext:managedObjectContext]; 


    [song setValue:songTitleString forKey:@"songTitle"]; 
    [song setValue:albumNameText.text forKey:@"albumName"]; 
    [song setValue:artistNameText.text forKey:@"artistName"]; 
    [song setValue:albumGenreText.text forKey:@"albumGenre"]; 
    [song setValue:UIImagePNGRepresentation(artworkImageview.image) forKey:@"artworkImage"]; 


    if (![managedObjectContext save:&error]) 
    { 
     NSLog(@"Problem saving: %@", [error localizedDescription]); 
    } 



    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Saved" message:@"" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
    [alert show]; 
    [alert release]; 

    [self.navigationController popViewControllerAnimated:YES]; 




} 

.. 노래를 저장하고 understan 수 없다 왜 이런 일이 일어나고 있는지.

이전 내 응용 프로그램의 흐름이었다 .. SongsListviewController-> Songs-> SaveSongs

하고 그것을 위해 .. 잘 작동했다.

은 도와주세요

+0

세이브라고하는 곳의 라인에 오류가 있는지 100 % 확신하십니까? 붙여 넣은 오류 메시지가 나를 조금은 의심스럽게 만듭니다. – Steve

+0

예 .. if (! [managedObjectContext save : & error])에 EXC_BAD_Access가 표시됩니다. – iProgrammer

+0

전체 스택 추적을 추가 할 수 있습니까? 또한 모든 표준 EXC_BAD_ACCESS 문제 해결 단계를 수행 했습니까? NSZombies 등을 사용 하시겠습니까? – Steve

답변

6

이 코어 데이터 당신의 "몰래"얻는다 몇 가지 흥미로운 방법이 더 이상 존재하지 않는 것들에 주위에 대한 참조를 유지할 수 있습니다.

이 경우 NSFetchedResultsController가 용의자입니다.

NSFetchedResultsController의 대리자를 설정하고 나중에 업데이트를 얻었습니다. 위임 인스턴스가 더 이상 해당 업데이트를 처리하지 못한다는 점을 제외하고는.

일부 배경 :

당신이 가져온 결과 컨트롤러에 대한 대리자를 설정 한 경우, 그 관리 객체 컨텍스트에서 변경 알림을 받기 위해 등록 컨트롤러. 결과 집합에 영향을주는 컨텍스트의 변경 또는 섹션 정보가 처리되고 그에 따라 결과가 으로 업데이트됩니다. 컨트롤러는 결과 개체 의 위치가 변경되거나 섹션이 수정 될 때 대리인에게 알립니다 ( NSFetchedResultsControllerDelegate 참조). 일반적으로 이러한 메서드 을 사용하여 테이블보기의 표시를 업데이트합니다.

그것은 수 있도록하는 것이 중요 반드시 전무 아웃 약한 참조가 자동으로 제로하지 않기 때문에이 (사전 ARC) 등의 대표를 설정할 때 -과 장소에 남아있는 경우가 휴식 할 수 있습니다.

해결책은 간단합니다. 인스턴스가 할당 해제 될 때 위임자를 nil로 설정하십시오.

관련 문제