這是我在第一CoreData應用程序,所以我肯定失去了一些東西在這裏,但我花了一個多星期試圖找到解決辦法,顯然沒有人在互聯網上有同樣的問題;)CoreData如何將關係實體連接到已經預加載數據的另一個實體?
我創建類似deckbuilder應用。 : 我的模型看起來是這樣的:coredatamodel
的關係是一對一和逆一對多(每卡可在一組,並在每一個組可以有很多卡)的卡要設置。
爲簡單起見,我想專注於CARD和SET實體。 我從CSV文件預裝載數據到5個屬性 - 沒有填充關係「卡丁」,因爲我不知道如何做到這一點。這個實體大約有25條記錄。
現在,問題是我試圖填充CARDS實體將有超過500個記錄。 嘗試幾個選項,我發現在所以我結束連接,在SET中創建了500條記錄:/所以它看起來像SQL「JOIN」命令。
我想要的是將數據加載到卡並以某種方式將它們連接到SET而不改變SET中的記錄數。
如果我有
property (nonatomic, retain) NSSet *karty;
NSSet究竟意味着什麼?它是什麼但是設置了什麼?卡實體的單行設置?一套卡對象?一組NSStrings?一套NSManagedObjects?
在正常的SQL主鍵連接他們將是「nazwaszort」所以Card.nazwaszort = Set.nazwaszort。
我Set.h
@class Card;
@interface Set : NSManagedObject
@property (nonatomic, retain) NSNumber * cykl;
@property (nonatomic, retain) NSNumber * czymajor;
@property (nonatomic, retain) NSString * nazwa;
@property (nonatomic, retain) NSString * nazwashort;
@property (nonatomic, retain) NSNumber * nrwcyklu;
@property (nonatomic, retain) NSSet *karty;
@end
@interface Set (CoreDataGeneratedAccessors)
- (void)addKartyObject:(Card *)value;
- (void)removeKartyObject:(Card *)value;
- (void)addKarty:(NSSet *)values;
- (void)removeKarty:(NSSet *)values;
@end
我Card.h
@class Frakcja, Kolekcja, Set;
@interface Card : NSManagedObject
@property (nonatomic, retain) NSNumber * czylimit;
@property (nonatomic, retain) NSString * frakcja;
@property (nonatomic, retain) NSString * icesila;
@property (nonatomic, retain) NSNumber * iloscwsecie;
@property (nonatomic, retain) NSNumber * influence;
@property (nonatomic, retain) NSString * kodkarty;
@property (nonatomic, retain) NSNumber * koszt;
@property (nonatomic, retain) NSNumber * minimumdecksize;
@property (nonatomic, retain) NSString * nazwa;
@property (nonatomic, retain) NSString * nazwasetu;
@property (nonatomic, retain) NSString * nazwaszort;
@property (nonatomic, retain) NSNumber * nrcyklu;
@property (nonatomic, retain) NSString * podtyp;
@property (nonatomic, retain) NSString * strona;
@property (nonatomic, retain) NSNumber * trashkoszt;
@property (nonatomic, retain) NSString * typ;
@property (nonatomic, retain) Kolekcja *ilewkolekcja;
@property (nonatomic, retain) Frakcja *nazwafrakcji;
@property (nonatomic, retain) Set *wjakimsecie;
@end
我預裝卡的使用方法
-(void) preloadDataPackInfoToDatabase {
NSError *error=nil;
NSString *sciezka = [[NSBundle mainBundle]pathForResource:@"nrsets" ofType:@"csv"];
NSArray *rows = [NSArray arrayWithContentsOfCSVFile:sciezka];
for (int i=1; i <=([rows count]-1); i++) {
Set *nowyDataPack = [NSEntityDescription insertNewObjectForEntityForName:[entityset name] inManagedObjectContext:_contextdp];
NSLog(@"tablica wierszy %@",rows[i][2]);
NSString *koddodatku = rows[i][2];
NSLog(@"kod dodatku:%@",koddodatku);
NSString *nrwcyklu = rows[i][4];
NSString *nrcyklu = rows[i][3];
NSString *nazwadatapack =rows[i][3];
NSString *czymajor =rows[i][0];
[nowyDataPack setValue:nazwadatapack forKey:@"nazwa"];
NSNumberFormatter *f = [[NSNumberFormatter alloc]init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *nrwcykluint = [f numberFromString:nrwcyklu];
NSNumber *nrcykluint = [f numberFromString:nrcyklu];
NSNumber *czymajorbool = [f numberFromString:czymajor];
[nowyDataPack setValue:nrwcykluint forKey:@"nrwcyklu"];
[nowyDataPack setValue:nrcykluint forKey:@"cykl"];
[nowyDataPack setValue:koddodatku forKey:@"nazwashort"];
[nowyDataPack setValue:czymajorbool forKey:@"czymajor"];
}
if (![ self.contextdp save:&error]) {
NSLog(@"Nieznany błąd %@,%@",error,[error userInfo]);
}
}
而另一種方法(在引擎收錄到SET不要淹沒你的屏幕 - >preloadAllCardsToDatabase
在此先感謝您的幫助。
如果這是你的第一個應用程序不斷,這是很好的時間來啓動命名您的英語,小子:) –
提供有關您的CSV –
好,而不是更多的細節變量有史以來第一個應用程序,而不是第一次coredata,但我不喜歡使用的語言,我不是在變量和方法本地說話者:)我也開始命名我的方法在波蘭語,然後正是我知道什麼功能不浪費時間來額外翻譯步驟在我的腦海;) – Sebastian