2

アプリケーションを初めて実行するときに、コア データに csv ファイルをロードしようとしています。ここにあるstackoverflowに関する別の投稿(大きなCSVファイルをコアデータにロードする最速の方法は何ですか)で、その方法を見つけました。

提供された関数 populateDB と同じコード フォームをコントローラーで使用し、データが以前に読み込まれたことがない場合 (最初の実行) に関数を呼び出しています。ただし、xcode でエラーが発生します。

No visible @interface for ...Controller declares the selector persistentStoreCoordinator.

機能は次のとおりです。

-(void)populateDB{
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
NSManagedObjectContext *context;
if (coordinator != nil) {
    context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
}

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"input" ofType:@"txt"];  
if (filePath) {  
NSString * myText = [[NSString alloc]
                           initWithContentsOfFile:filePath
                           encoding:NSUTF8StringEncoding
                           error:nil];
if (myText) {
    __block int count = 0;


    [myText enumerateLinesUsingBlock:^(NSString * line, BOOL * stop) {
        line=[line stringByReplacingOccurrencesOfString:@"\t" withString:@" "];
        NSArray *lineComponents=[line componentsSeparatedByString:@" "];
        if(lineComponents){
            if([lineComponents count]==3){
                float f=[[lineComponents objectAtIndex:0] floatValue];
                NSNumber *number=[NSNumber numberWithFloat:f];
                NSString *string1=[lineComponents objectAtIndex:1];
                NSString *string2=[lineComponents objectAtIndex:2];
                NSManagedObject *object=[NSEntityDescription insertNewObjectForEntityForName:@"Bigram" inManagedObjectContext:context];
                [object setValue:number forKey:@"number"];
                [object setValue:string1 forKey:@"string1"];
                [object setValue:string2 forKey:@"string2"];
                NSError *error;
                count++;
                if(count>=1000){
                    if (![context save:&error]) {
                        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
                    }
                    count=0;

                }
            }
        }



    }];
    NSLog(@"done importing");
    NSError *error;
    if (![context save:&error]) {
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
    }

}  
}
}

私は 3 年間の不在の後、再び iOS を取り上げていますが、これまで SDK のこの部分に飛び込んだことはありません。この問題について何か助けていただければ幸いです...

4

3 に答える 3

1

みんなの助けに感謝します。2〜3年前のフォーラムであるstackoverflowで答えを見つけました(既存のiPhoneプロジェクトにコアデータを追加する)...

したがって、問題は、最初にプロジェクトを作成したときにコアデータを使用して要求せず、後でそれを行っただけだったようです。私が上に投稿した投稿に続いて:

Add the following to supporting files/projectName-Prefix.pch

#import <CoreData/CoreData.h>

私がしたら、persistenceCoordinatorエラーは消えました...

うわー、そこで学んだ大きな教訓...

于 2013-10-26T04:29:19.990 に答える