Запрос на получение, который не извлекается - PullRequest
0 голосов
/ 06 июля 2011

Я работаю над проектом основных данных, который будет связываться с моим Ipad и отправлять данные ядра туда и обратно.У меня сетевая часть в основном разобрана, но у меня проблемы с получением простого запроса на выборку.Вот запрос на выборку:

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext];
//NSManagedObjectContext *context=[self managedObjectContext];
if (context == nil){
    NSLog(@"Crap");
}
NSLog(@"Context:  %@",context);
//fetch request:  (found here:  http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Articles/05_Fetching.html)
NSLog(@"Starting to fetch:");

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Song" inManagedObjectContext:context];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cueNo" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy];

Если я использую это:

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext];

Тогда я получаю сообщение об ошибке:

+ entityForName: могли быне найти NSManagedObjectModel для имени сущности 'Song'

Если я использую это:

NSManagedObjectContext *context=[self managedObjectContext];

mutableFetchResults возвращается ноль, даже если у меня есть данные в сущности Song.

Я скопировал этот запрос на выборку непосредственно из предыдущей версии, используя первый метод для установки контекста, и он прекрасно работал там.

Любая помощь будет принята с благодарностью!

Устранение неполадок:

Printing description of persistentStoreCoordinator:

    Printing description of _managedObjectModel:
(<NSManagedObjectModel: 0x1001c5250>) isEditable 0, entities {
    Song = "(<NSEntityDescription: 0x100149ba0>) name Song, managedObjectClassName NSManagedObject, renamingIdentifier Song, isAbstract 0, superentity name (null), properties {\n    cueName = \"(<NSAttributeDescription: 0x1001c5600>), name cueName, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueName, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n    cueNo = \"(<NSAttributeDescription: 0x1001c5570>), name cueNo, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueNo, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n}, subentities {\n}, userInfo {\n}, versionHashModifier (null)";
}, fetch request templates {
    newFetchRequest = "<NSFetchRequest: 0x1001c5420> (entity: Song; predicate: (cueNo < \"0\"); sortDescriptors: (null); limit: 0)";
}

Printing description of _managedObjectContext:
<NSManagedObjectContext: 0x1001c5890>

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Ошибка говорит о том, что контекст управляемого объекта не имеет модели управляемого объекта, содержащей объект Song. Модель управляемого объекта - это файл .xcdatamodel.

Если вы хотите открыть постоянное хранилище на другом устройстве, ваше локальное приложение должно иметь доступ к тому же файлу модели, который создал удаленное постоянное хранилище, и добавить модель в локальный контекст. Полученная ошибка указывает на то, что этого не происходит.

Если это работало ранее, то вы, вероятно, просто не добавили или удалили файл .xcdatamodel, определяющий сущность Song, из цели сборки локального приложения в XCode.

0 голосов
/ 06 июля 2011

Сообщение об ошибке довольно ясно, оно говорит вам, что NSEntityDescription не смог найти ни одного объекта с таким именем в указанном вами контексте управляемого объекта.Так как вы, кажется, проверяете, что контекст не ноль (хороший первый шаг), вам нужно рассмотреть остальную часть стека базовых данных.Имеется ли в контексте управляемого объекта постоянный координатор хранилища?Удостовериться.Есть ли у координатора постоянных хранилищ модель управляемых объектов?Эта модель действительно содержит сущность Song?Где-то вдоль линии что-то сломано, но выше недостаточно подробностей, чтобы угадать, где.

Что касается второй опции контекста управляемого объекта, executeFetchRequest:error: должен возвращать nil только в случае возникновения ошибки.Вы передаете параметр ошибки, так что это первое, на что вы должны обратить внимание, чтобы определить, что не так.

Запрос выборки не является явно неправильным, но ваши проблемы предполагают, что контексты вашего управляемого объекта каким-то образом нарушены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...