2013-05-09 4 views
2

난 그냥 여기[MyClassName copyWithZone :] : 인식 할 수없는 선택기가 인스턴스로 전송 되었습니까?

@interface ExampleNestedTablesViewController() 
{ 
    NSMutableArray *projectModelArray; 
    NSMutableDictionary *sectionContentDictionary; 

} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ProjectModel *project1 = [[ProjectModel alloc] init]; 
    project1.projectName = @"Project 1"; 

    ProjectModel *project2 = [[ProjectModel alloc] init]; 
    project2.projectName = @"Project 2"; 
    if (!projectModelArray) 
    { 
     projectModelArray = [NSMutableArray arrayWithObjects:project1, project2, nil]; 
    } 

    if (!sectionContentDictionary) 
    { 
     sectionContentDictionary = [[NSMutableDictionary alloc] init]; 

     NSMutableArray *array1  = [NSMutableArray arrayWithObjects:@"Task 1", @"Task 2", nil]; 
     [sectionContentDictionary setValue:array1 forKey:[projectModelArray objectAtIndex:0]]; // **this line crashed**. 

    } 
} 

내 프로젝트 모델

@interface ProjectModel : NSObject 

typedef enum 
{ 
    ProjectWorking = 0, 
    ProjectDelayed, 
    ProjectSuspended, 

} ProjectStatus; 

@property (nonatomic, assign) NSInteger idProject; 
@property (nonatomic, strong) NSString* projectName; 
@property (nonatomic, strong) NSMutableArray* listStaff; 
@property (nonatomic, strong) NSTimer* projectTimer; 
@property (nonatomic, assign) ProjectStatus projectStatus; 
@property (nonatomic, strong) NSMutableArray* listTask; 
@property (nonatomic, assign) NSInteger limitPurchase; 
@property (nonatomic, strong) NSDate* limitTime; 
@end 

내 클래스 구현 그리고 출력은 다음과 같습니다 SDNestedTablesExample [1027 : C07] - [ProjectModel copyWithZone가 :] : 인식 할 수없는 선택기 인스턴스에 전송 0x7562920. 어떤 문제인지 몰랐습니다. 너 나 좀 도와 줄 수있어?

답변

3

NSMutableDictionary setObject:forKey:에 대한 문서를 살펴보십시오 (참고 : 이 아니라 setObject:forKey:을 사용해야 함). 예상되는 키 유형을 확인하십시오. 유형은 id<NSCopying>이어야합니다. 즉, 키는 NSCopying 프로토콜을 준수해야합니다. copyWithZone: - 당신의 ProjectModel 클래스는 NSCopying 프로토콜의 필요한 방법을 구현하지 않기 때문에

열쇠 유형 ProjectModel의 때문에

오류가 불평한다.

ProjectModel 개체를 키로 사용 하시겠습니까? 이렇게하면 copyWithZone 외에도 isEqual:hash 방법의 정상적인 구현이 필요하다는 것을 의미합니다.

해결 방법은 ProjectModel 클래스를 업데이트하여 NSCopying 프로토콜을 따르고 copyWithZone: 메서드를 구현하는 것입니다. 또한 isEqual:hash 메소드를 올바르게 구현하십시오. 또는 키가 idProject 속성 (올바르게 포장 된 NSNumber)이되도록 변경하십시오.