2014-03-02 2 views
0

세 가지보기 HomeViewController, AddViewControllerAddCategoryViewController의 간단한 앱이 있습니다.핵심 데이터 관계 문제

enter image description here

내 목표는 WMDGCategory 객체에 의해 정의 된 섹션 아래에 그룹화, HomeViewController에있는 tableview에 WMDGActivity 개체를 표시 할 수 있습니다 :

내 데이터 모델은이 같은 관계로 두 개의 엔티티가 있습니다.

새로운 WMDGCategory 객체는 AddCategoryViewController에서 텍스트 필드를 통해 추가되는 새로운 WMDGActivity 객체는 AddViewController에서 텍스트 필드를 통해 추가됩니다.

내 문제는 취소하거나 보조보기 중 하나에 저장하면 응용 프로그램이 충돌한다는 것입니다. 오류 코드는 변함입니다 :

reason: '[<WMDGActivity 0x8a54830> valueForUndefinedKey:]: the entity WMDGActivity is not key value coding-compliant for the key "WMDGCategory".' 

나는 또한 내가 WMDGCategory 개체의 이름이 포함 된 선택기 휠 롤이 때마다 참조 : 실제로

data: { 
    activities = "<relationship fault: 0x8db1600 'activities'>"; 
    name = Pastimes; 

을, 또 다른 신비 앱이 분명히이 절약된다는 점이다 사고 전의 물건. 코드를 단계별로 시도했지만 아직 해결 방법을 찾지 못했습니다. 내 엔티티가 설정되는 방식에 문제가 있거나 해당 코드와 상호 작용하는 방식에 문제가 있다고 생각합니다. 모두 AddViewController에 대한

HomeViewController에서 (위임 및 AddCategoryViewController : AddCategoryViewController에서

#pragma mark AddViewControllerDelegate stuff 

-(void) addViewControllerDidSave 
{ 
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; 
    [localContext MR_saveToPersistentStoreAndWait]; 
    [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
    [self refreshData]; 

} 

-(void) addViewControllerDidCancel:(WMDGActivity *) activityToDelete 
{ 
    [activityToDelete MR_deleteEntity]; 
    [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
    [self refreshData]; 

} 

#pragma mark AddCatControllerDelegate stuff 

-(void) addCatControllerDidSave 
{ 
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; 
    [localContext MR_saveToPersistentStoreAndWait]; 
    [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
    [self refreshData]; 

} 

-(void) addCatControllerDidCancel:(WMDGCategory *) categoryToDelete 
{ 
    [categoryToDelete MR_deleteEntity]; 
    [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
    [self refreshData]; 

} 

:

- (IBAction)saveButton:(UIBarButtonItem *)sender 
{ 
    if (self.catTextField.text.length > 0) 
    { 
     self.thisCategory.name = self.catTextField.text; 
    } 
    [self.delegate addCatControllerDidSave]; 
} 

- (IBAction)cancelButton:(UIBarButtonItem *)sender 
{ 
    [self.delegate addCatControllerDidCancel:self.thisCategory]; 
} 

그리고 AddViewController에서 여기

내가 관련 코드를 생각하는 것입니다 :

- (IBAction)saveButton:(UIBarButtonItem *)sender 
{ 
    if (self.activityField.text.length > 0) 
    { 

     if (self.categoryLabel.text.length < 1) 
     { 
      self.thisCategory.name = @"Uncategorized"; 
      //   self.thisActivity.activityName = self.activityField.text; 
      //   [self.delegate addActivityViewControllerDidSave]; 
     } 

     else 
     { 
     self.thisCategory.name = self.categoryLabel.text; 
     self.thisActivity.name = self.activityField.text; 
     NSLog(@"Category name is %@", self.thisCategory.name); 
     NSLog(@"Activity name is %@", self.thisActivity.name); 
     } 


     [self.delegate addViewControllerDidSave]; 

    } 

    else 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No activity entered" 
                 message:@"Please enter a new activity or Cancel" 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 



} 

- (IBAction)cancelButton:(UIBarButtonItem *)sender 
{ 
    [self.delegate addViewControllerDidCancel:self.thisActivity]; 
} 

누구든지 내가 뭘 잘못하고 있는지 보여 주실 수 있습니까?

답변

1

제 문제는 보조보기 중 하나에서 취소하거나 저장하면 앱이 충돌한다는 것입니다. 오류 코드는 항상 다음과 같습니다.

오류 호출 스택 및 오류가 발생한 코드를 보는 것이 도움이됩니다. 하지만 계속해서 추측을 던지겠습니다. 이는 NSFetchedResultsController을 구성하고 WMDGCategorysectionNameKeyPath으로 지정한다는 것입니다. 이 두 가지가 잘못되었습니다. 먼저, 키 경로는 toCategory입니다. WMDGCategory이 데이터 유형입니다. 둘째, 카테고리 이름별로 테이블보기를 구성하려면 toCategory.name 키 경로를 사용해야합니다. 또한 활동을 toCategory.name (사전 요구 사항 : NSFetchedResultsController)으로 미리 정렬해야합니다.당신이보고있는 것은 WMDCategory 객체의 설명을

입니다 :

나는이 내가 WMDGCategory 객체의 이름을 포함 피커 휠을 사용 할 때마다 참조하십시오. 필요한 것은 name 속성의 값입니다. [category valueForKey:@"name"]을 사용하거나 편의 클래스를 사용하는 경우 category.name을 사용해야합니다.

+0

응답 해 주셔서 감사합니다. 나는 당신의 제안을 시도해 보았고 아마도 다른 두 가지 변화로 너무 멀리 갔다. 이제는 분명히 관련이있는 새로운 문제로 자신을 발견하지만 원래 질문을 편집하거나 새 질문을 시작할 지 여부를 모르겠다. 글쎄요, 여기에 오류 스택이 있습니다. *** 데이터 : { category = nil; name = Programming; toCategory = nil; *** – rattletrap99

+0

죄송합니다. 그 나머지 부분은 다음과 같습니다 : – rattletrap99

+0

***})는 섹션 이름 키 경로 'toCategory.name'에 대해 nil 값을 반환했습니다. 개체는 이름이 지정되지 않은 섹션에 배치됩니다. *** Danged send-on-return! – rattletrap99