0

私は CoreData で多くの問題を抱えています。学習曲線は非常に急です。私はかなり初心者の XCode ユーザーであり、データベースについてもあまり知りません。私は自分のプログラムにどのようなアプローチを取るべきかを理解しようとかなりの時間を費やしてきましたが、実際につまずきました。

それがcoreDataが使用していると思ったので、sqliteを学ぼうとしました。そこで、LibreOffice は無料のデータベース プログラムだったので、LibreOffice で多くの関係を持つ巨大なデータベースを作成しました。その後、SQLite とは異なる HSQL にあることに気付きました。そのため、すべてを .csv にエクスポートする必要があり、関係を失い、SQLite データベース テーブルを作成するために SQLiteManager というくだらないプログラムにお金を払いました。

すべてのセットアップが完了したら、CoreData をもう一度調べ始めましたが、CoreData では外部の sqlite データベースを使用できないことに気付きました! ああ。この時点で、私はかなりイライラしています。そこで、coreData を使用してゼロからやり直し、エンティティ、属性、関係などをすべてマネージド オブジェクト形式で使用して空のモデルを構築しました。ビルド時に空の「独自の」coreData SQLite データベースを作成できること、およびそれが機能することを確認しました。

しかし今、私は managedObjects を入力しようとしていますが、関係に問題があります

これは、私のヘッダー ファイルの 1 つがどのように見えるかです。

#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データベースにデータを入力しようとしています(ただし、古いDBへのSQLite接続を実行して同じことを実行できると思いますが、それは別の問題です) )

- (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 を与えようとすると失敗します。だから、私は迷っています。助けてください?????????

4

1 に答える 1

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];
}
于 2012-05-05T09:34:20.283 に答える