2012-05-05 2 views
0

CoreData에 많은 어려움이 있습니다. 학습 곡선은 매우 가파른 편입니다. 저는 꽤 초보자 인 XCode 사용자이고 데이터베이스에 대해서도 많이 모릅니다. 나는 내 프로그램을 위해 어떤 접근법을 취해야 하는지를 알아 내려고 꽤 오랜 시간을 보냈으며 지금 막 따라 잡았습니다.XCode 4.2 CoreData NSSet 일대 다 엔티티 관계에 데이터 추가

나는 coreData가 사용하는 것이라고 생각했기 때문에 sqlite를 배우려고했습니다. 그래서 무료 데이터베이스 프로그램 이었기 때문에 LibreOffice에서 많은 관계로 거대한 데이터베이스를 만들었습니다. 그렇다면 SQLite와는 다른 HSQL에 있다는 것을 깨달았습니다. 그래서 모든 것을 .csv 파일로 내보내고 내 관계를 잃어 버렸고 SQLiteManager라는 진절머리 나는 프로그램에 지불하여 SQLite 데이터베이스 테이블을 만들었습니다.

일단 모든 설정이 완료되면 CoreData를 다시보고 시작했는데 CoreData가 외부 sqlite 데이터베이스를 사용할 수 없다는 것을 알았습니다! 아. 이 시점에서 저는 꽤 좌절합니다. 그래서 이제 coreData로 처음부터 다시 시작했고 엔티티, 속성, 관계 등을 포함한 빈 모델을 모두 관리 된 Object 형식으로 작성했습니다. 건물을 만들 때 비어있는 '독점적 인'coreData SQLite 데이터베이스를 만들 수 있다는 것을 확인했습니다.

그러나 지금, 나는 managedObjects을 채우기 위해 노력하고 있지만, 관계

이 내 헤더 파일 중 하나가 모습입니다에 문제가 발생하고있다. , 나는 나의 오래된 DB에 SQLite는 연결을 실행하고를 할 수있는 가정하더라도

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

@class ORGAN, SPECIMEN, SYSTEM, TISSUE; 

@interface CELL : NSManagedObject 

@property (nonatomic, retain) NSString * cellDescription; 
@property (nonatomic, retain) NSString * cellName; 
@property (nonatomic, retain) NSString * cellSID; 
@property (nonatomic, retain) NSSet *organs; 
@property (nonatomic, retain) NSSet *specimens; 
@property (nonatomic, retain) NSSet *systems; 
@property (nonatomic, retain) NSSet *tissues; 
@end 

@interface CELL (CoreDataGeneratedAccessors) 

- (void)addOrgansObject:(ORGAN *)value; 
- (void)removeOrgansObject:(ORGAN *)value; 
- (void)addOrgans:(NSSet *)values; 
- (void)removeOrgans:(NSSet *)values; 

- (void)addSpecimensObject:(SPECIMEN *)value; 
- (void)removeSpecimensObject:(SPECIMEN *)value; 
- (void)addSpecimens:(NSSet *)values; 
- (void)removeSpecimens:(NSSet *)values; 

- (void)addSystemsObject:(SYSTEM *)value; 
- (void)removeSystemsObject:(SYSTEM *)value; 
- (void)addSystems:(NSSet *)values; 
- (void)removeSystems:(NSSet *)values; 

- (void)addTissuesObject:(TISSUE *)value; 
- (void)removeTissuesObject:(TISSUE *)value; 
- (void)addTissues:(NSSet *)values; 
- (void)removeTissues:(NSSet *)values; 

@end 

하고, 내 applicationDelegate 파일에, 나는 관습을 사용하여 내 coreData 데이터베이스를 채우기 위해 노력하고는 "@"(리소스 섹션에있는 파일을 구분 같은,하지만 그 또 다른 문제입니다)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
//cells 
NSString *paths = [[NSBundle mainBundle] resourcePath]; 
NSString *bundlePath = [paths stringByAppendingPathComponent:@"cells"]; 
NSString *dataFile = [[NSString alloc] initWithContentsOfFile:bundlePath]; 
NSArray *dataRows = [dataFile componentsSeparatedByString:@"\n"]; 

for (int i = 0 ; i < [dataRows count] ; i++) 
{ 
    NSArray *dataElements = [[dataRows objectAtIndex:i] componentsSeparatedByString:@"@"]; 
    if ([dataElements count] >= 2) 
    { 
     CELL *cellMO = [NSEntityDescription insertNewObjectForEntityForName:@"CELL" 
           inManagedObjectContext:[self managedObjectContext]]; 

     cellMO.cellName = [dataElements objectAtIndex:0]; 
     cellMO.cellDescription = [dataElements objectAtIndex:1]; 

     cellMO.organs ???????????????????????????? can't make this work. 


    } 
} 

이 줄로 빌드 할 때 계속 깨고 여러 가지 접근 방식으로 시도했습니다. 그것은 cellMO.organs가 NSSet을 기대한다고 말하고 있지만, NSSet을 줄 때 실패합니다. 그래서, 나는 길을 잃었다. 도와주세요?????????

답변

2

줄의 나머지 부분에 organs 인 문자열이 0 개 이상 있다고 가정합니다. 그래서 :

if (i>1) { 
    // if organ does not exist yet 
    ORGAN *organMO = [NSEntityDescription insertNewObjectForEntityForName:@"ORGAN" 
          inManagedObjectContext:[self managedObjectContext]]; 
    organMO.name = [dataElements objectAtIndex:i]; 
    // otherwise fetch it 
    [cellMO addOrgansObject:organMO]; 
} 
+0

아 ... 제가 해봅시다. 똑똑해 보입니다. 유일한 것은 내가 읽고있는 목록에 내장 된 관계가 없다는 것입니다. 난 그냥 세포 관리 개체에 관계의 추가를 테스트하려고했습니다. 그들은 이것을하기위한 일종의 그래픽 방식을 만들어야합니다. – esd100

+0

예! ... 작동했습니다! 대단히 고맙습니다! 내 응용 프로그램에서 이와 같은 작업을 계속하는 것 이외의 CoreData 데이터베이스를 채우는 방법에 대한 조언은 준비가 완료 될 때까지 시작되었습니다. SQL 테이블과 같이 그래픽 방식으로 구현하고 싶습니다. – esd100

+0

제가 CELL 테이블을 가지고 있고 ORGANS 테이블을 가지고 있다고 가정 해 봅시다. 어떻게하면 많은 관계를 추가 할 수 있습니까? 예를 들면. 나는 CELL A를 가지고 ORGANS B, C, & E에 존재한다고 말하고 싶습니다. 어떻게 구체적으로 할 수 있습니까? 귀하의 도움을 크게 주시면 감사하겠습니다. – esd100

관련 문제