일부 핵심 데이터 클래스를 하위 클래스로 만들려고합니다. 나는 다음과 같은 클래스를 가지고 :목표 C 상속
코어 데이터 클래스 :
@interface CDExplanatoryMaterial : NSManagedObject
@property (nonatomic, retain) NSString * document;
@property (nonatomic, retain) NSString * id;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * pageNumber;
@property (nonatomic, retain) NSNumber * realPageNumber;
@property (nonatomic, retain) NSString * url;
@end
비즈니스 로직 클래스의 프로토콜 : BLExplanatoryMaterial에 대한
@protocol BLDataClass <NSObject>
- (NSArray*)favouriteInGroups;
@property (nonatomic, readonly, retain) NSString* type;
@property (nonatomic, readonly, retain) NSArray* inFavouriteGroups;
- (void)addAddToFavouriteGroup: (NSString*) groupName;
- (void)removeFromFavouriteGroup: (NSString*) groupName;
- (void)addToHistory;
@end
인터페이스 :
@interface BLExplanatoryMaterial : CDExplanatoryMaterial <BLDataClass>
나는 데이터를 얻을 좋아요 :
개+ (NSMutableArray*) explanatoryMaterials {
NSMutableArray* results = [[NSMutableArray alloc] init];
for(CDExplanatoryMaterial *item in [Helper fetchDataObjectsOfType:@"CDExplanatoryMaterial"])
{
[results addObject: (BLExplanatoryMaterial*)item];
}
return results;
}
도우미 클래스는 다음과 같습니다 : 내가 가지고있는
@implementation Helper
+ (NSArray*) fetchDataObjectsOfType:(NSString *)type {
DataManager* manager = [DataManager sharedInstance];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:type inManagedObjectContext:manager.mainObjectContext];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [manager.mainObjectContext executeFetchRequest:fetchRequest error:&error];
return fetchedObjects;
}
@end
이 문제는 fetchDataObjectsOfType에서 fetchedObjects 배열 explanatoryMaterials의 결과 배열은 NSManagedObject 객체를 포함한다는 것이다. fetchedObjects에 BExxplanatoryMaterial을 포함하는 CDExplanatoryMaterial 객체와 결과가 포함될 것으로 기대됩니다. 최종 결과가 BLExplanatoryMaterial 객체가 필요하거나 내 인스턴스 메서드 중 하나를 사용할 수 없습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
감사합니다,
조
편집 :
은 그냥이 expMat가 NSManagedObject하고 addToFavouriteGroup 방법을 지원하지 않기 때문에 실패 다음 코드 명확히하기.NSMutableArray* expMats = [Data explanatoryMaterials];
BLExplanatoryMaterial* expMat = (BLExplanatoryMaterial*) [expMats objectAtIndex:0];
[((BLExplanatoryMaterial*)expMat) addToFavouriteGroup:@"Test Group"]
내가 언급 한 것을 잊어 버린 점 중 하나는 원래 게시물의 모든 코드가 정적 라이브러리에 있다는 것입니다. 이 편집에 게시 된 코드는 IOS App 프로젝트에 있습니다. 이것이 차이를 가져올 지 모르겠습니다. 정적 라이브러리의 모든 클래스는 public으로 표시됩니다.
Configurations -> Default 비트를 살펴 봤는데 CDExplanatoryMaterial이 CDExplanatoryMaterial 엔티티의 클래스라고합니다. 내가 옳은 것 같은데? 나는 그것을 바꾸려고 노력할 것이다. – JoeS
클래스를 변경해도 아무런 차이가 없습니다. – JoeS
'NSManagedObject' 서브 클래스에서'-awakeFromFetch'를 오버라이드 (override)하여 객체가 저장소에서 가져올 때 호출되는지 확인할 수 있습니까? – Aderstedt