1

Core Data に問題があります。私は2つのエンティティ(記事と製造業者)を持っています(1つは他のエンティティの配列である変換可能な属性を含みます)。配列を NSManagedObject に追加しようとするまで、すべてが正常に機能しています。ここにいくつかのコードがあります:

@implementation HASArticleInitializer

- (void)initialize:(NSArray *)initArray {
    //Alloc and init some local variables
    NSMutableArray *articleEntitiesArray = [NSMutableArray alloc] init];
    for (NSInteger pageIndex = 1; pageIndex <= pageCount; pageIndex++) {

        //Parsing the website

        //For-loop for every object on every page
        for (NSInteger object = 0; object < [articleNumbersOnOnePageArray count]; object++) {
            //Doing other string manipulation and parsing stuff


            NSManagedObject *newArticleEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Article"inManagedObjectContext:context];

            [newArticleEntry setValue:[NSString stringWithFormat:@"%@_%@", manufacturerNumber, articleNumber] forKey:@"number"];
            [newArticleEntry setValue:articleTextComplete forKey:@"text"];
            [newArticleEntry setValue:articleStatus forKey:@"status"];
            [newArticleEntry setValue:manufacturerName forKey:@"manufacturerName"];
            [newArticleEntry setValue:manufacturerNumber forKey:@"manufacturerID"];

            [articleEntitiesArray addObject:newArticleEntry];
        }
    }

    NSManagedObject *newManufacturerEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Manufacturer" inManagedObjectContext:context];

    //Encoding the NSArray and setting the entity attribute to Binary Data doesn't work neither
    //NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:articleEntitiesArray];

    [newManufacturerEntry setValue:manufacturerName forKey:@"name"];
    [newManufacturerEntry setValue:manufacturerNumber forKey:@"manufacturerID"];
    [newManufacturerEntry setValue:manufacturerCount forKey:@"count"];
    [newManufacturerEntry setValue:articleEntitiesArray forKey:@"articles"];
    NSLog(@"%@", articleEntitiesArray);
}


@end

私はそれが役に立たない、または役に立たないと思ったことをすべて試しました。私は本当にこれに何日も費やしましたが、AppDelegateの- (IBAction)saveAction:(id)senderメソッドが呼び出されると常に次のエラーが発生します:

[15836:a057] -[NSManagedObject encodeWithCoder:]: unrecognized selector sent to instance 0x1001896e0
[15836:a057] An uncaught exception was raised
[15836:a057] -[NSManagedObject encodeWithCoder:]: unrecognized selector sent to instance 0x1001896e0
[15836:a057] (
0   CoreFoundation                      0x00007fff8dc94716 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff8bfe6470 objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8dd2ad5a -[NSObject(NSObject) doesNotRecognizeSelector:] + 186
3   CoreFoundation                      0x00007fff8dc82c3e ___forwarding___ + 414
4   CoreFoundation                      0x00007fff8dc82a28 _CF_forwarding_prep_0 + 232
5   Foundation                          0x00007fff86931401 _encodeObject + 1163
6   Foundation                          0x00007fff869323cc -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 410
7   Foundation                          0x00007fff869320c9 -[NSArray(NSArray) encodeWithCoder:] + 473
8   Foundation                          0x00007fff86931401 _encodeObject + 1163
9   Foundation                          0x00007fff869358f9 +[NSKeyedArchiver archivedDataWithRootObject:] + 182
10  iLoadPix                            0x0000000100003c21 -[HASArticleInitializer initialize:] + 3793
11  Foundation                          0x00007fff86926842 __NSThread__main__ + 1345
12  libsystem_c.dylib                   0x00007fff88553782 _pthread_start + 327
13  libsystem_c.dylib                   0x00007fff885401c1 thread_start + 13

コア データ モデル: エンティティ 1 エンティティ 2

私が言ったように、配列を保存しなければ、すべて正常に動作し、NSLog も正しいです。それが重要な場合は、NSThreads を使用します (ただし、他のすべてが正常に機能するため、そうは思いません) :-(

私を助けてください!よろしくお願いします!:-(

4

1 に答える 1

1

変換可能なプロパティは、キー付きアーカイブ/アーカイブ解除を介してアーカイブされます...ただし、NSManagedObjectは、この方法でアーカイブされるようには設計されていません。NSCoding(プロトコルを実装していません。)

これを回避するには、管理対象オブジェクトをディクショナリ表現に変換できますが、最も自然なことは、2つのエンティティ間のコアデータ関係を使用することです。ここで関係をモデル化しなかった理由はありますか?

于 2012-07-17T21:50:53.697 に答える