xcdatamodeld에서 생성 된 Core Data 클래스 인 ZSShotCD가 있습니다 (모델에 올바르게 클래스를 설정했습니다). 나는 어떤 시간에 다시 생성해야 할 수도 있기 때문에 거기에 임의의 커스텀 메소드를 넣고 싶지 않으므로 ZSShot으로 서브 클래 싱했습니다.NSManagedObject 하위 클래스 - 인스턴스로 전송 된 인식 할 수없는 선택자
첫째, 생성 된 클래스 :
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface ZSShotCD : NSManagedObject
@property (nonatomic, retain) NSString * shotDescription;
@property (nonatomic, retain) NSString * shotType;
@end
하는 .m 파일을 사용하면 속성에 대한 @dynamic 선언의 무리와 함께, 기대하는 것입니다 여기에 몇 가지 관련 비트입니다. 나는 그것을 전혀 망쳐 놓지 않았다. 서브 클래스에 대한 지금
- ZSShot.h :#import <Foundation/Foundation.h>
#import "ZSShotCD.h"
@interface ZSShot : ZSShotCD
- (NSString *)MainText;
@end
그리고하는 .m 파일 :
#import "ZSShot.h"
@implementation ZSShot
- (NSString *)MainText
{
NSString *mainText = [NSString stringWithFormat:@"%@ %@", [self valueForKey:@"shotType"], [self valueForKey:@"shotDescription"]];
return mainText;
}
나는이 같은 ZSShot의 인스턴스에의 mainText 메소드를 호출 할 때 :
cell.shotDescriptionLabel.text = [item MainText];
내가 얻을 :
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ZSShotCD MainText]: unrecognized selector sent to instance 0x8d130c0'
해당 인스턴스 (셀) 엔티티에 정의 된 특성에 문제가 없습니다 (핵심 데이터에서 데이터를 가져온 것). 그리고 다른 엔티티에 구축 된 클래스의 다른 위치에서 사용 된 것과 기본적으로 동일한 코드를 사용하고 있습니다. 유일한 차이점은 하위 클래스에 정의 된 메서드를 사용하려는 나의 시도입니다.
누구든지이 문제에 대해 의견을 개진 할 수 있습니까?
이
또는 당신은 얻을 것이다 (사용자 정보가 NSManagedObject 클래스이다 사용자 기반 서브 클래스입니다.) :
'항목'의 유형은 무엇입니까? 'NSLog (@ "% @", [item class])'로 확인하십시오.'ZSShotCD'라고 생각합니다. BTW 하위 클래스 대신 범주를 사용하지 않는 이유는 무엇입니까? – KudoCC
항목을 생성 한 코드를 보여 주시겠습니까? @KudoCC가 말했듯이 ZSShotCD가 아닌 ZSShotCD 인 것처럼 보입니다. ZSShot은 예외로 확인됩니다. – Paulw11
코어 데이터 가져 오기를 수행하여 "ZSShot 인스턴스"를 얻었을 것입니다.이 경우 ZSShot의 인스턴스는 아니지만 ZSShotCD의 인스턴스입니다. 오류 메시지는 이에 대해 아주 분명합니다. @ KudoCC의 카테고리에 대한 제안은 spot-on입니다. 그러면 서브 클래스의 인스턴스가되도록 가져 오기 결과를 캐스팅하거나 피들을 넣거나 아무것도하지 않아도됩니다. – RobP