0

コードはiOS5以降で正常に機能します。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"FooBar"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"ident"
                                                                                 ascending:NO
                                                                                  selector:@selector(compare:)]];
request.predicate = [NSPredicate predicateWithFormat:@"xxx = %@", @"yyy"];

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:model.managedObjectContext
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];

しかし、iOS 4では、次のエラーが発生しました。

'NSObjectInaccessibleException', reason: 'This fetch request (0x70d4700) 
was created with a string name (FooBar), and cannot respond to -entity 
until used by an NSManagedObjectContext'

2012-11-08 12:12:18.093 hello[1566:11d03] *** Terminating app due to uncaught
exception 'NSObjectInaccessibleException', reason: 'This fetch request 
(0x70d4700) was created with a string name (FooBar), and cannot respond 
to -entity until used by an NSManagedObjectContext'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x012405a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x0104a313 objc_exception_throw + 44
    2   CoreData                            0x000be68f -[NSFetchRequest entity] + 159
    3   CoreData                            0x0019f7fb -[NSFetchedResultsController initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:] + 763
    ...

このエラーを解決するにはどうすればよいですか?

4

2 に答える 2

6

fetchRequestWithEntityName:iOS 5 以降でのみ使用できます。

iOS 4 では、NSEntityDescription最初に以下を作成する必要があります。

NSEntityDescription *fooBarEntity = [NSEntityDescription entityForName:@"FooBar" inManagedObjectContext:model.managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:fooBarEntity];
于 2012-11-08T07:59:06.907 に答える
0

問題は、NSFetchRequest にオブジェクトを取得するためのコンテキストがないことです... entityDescription を取得するには、常に特定のコンテキストが必要です。iOS5では、entityDescriptionの取得はうまく隠され、フェッチを実行するまで遅れます:)

ヘッダーが間違っています。それはios4にすべて良いと言います:

+ (NSFetchRequest*)fetchRequestWithEntityName:(NSString*)entityName NS_AVAILABLE(10_7, 4_0);

バグを報告します。とにかく@Martin Rは正しいです:)

于 2012-11-08T09:10:15.217 に答える