2010-09-25 2 views
1

Я получаю эту классическую ошибку:Классического CoreData ошибка

Модель используется для открытия магазина, несовместимая с тем, которая используется для создания магазина

Это как это реализовано:

NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 

NSManagedObject *newShot = [NSEntityDescription insertNewObjectForEntityForName:@"shotName" inManagedObjectContext:context]; 

NSString *newName= @"test"; 
[newShot setName:newName]; 

И это, как он предназначен:

alt text

Нет только я не получаю сбой с сообщением выше, я также получаю это предупреждение:

«NSManagedObject» могут не реагировать на «-setName:»

Очевидно что-то что-то не так, я думаю, что я использую Strings с обеих сторон.


Edit, сейчас я использую это после того, как комментарий Eimantas в:

NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
NSManagedObject *newShot = [NSEntityDescription insertNewObjectForEntityForName:@"shotName" inManagedObjectContext:context]; 
NSString *newName= @"test"; 
[newShot setValue:newName forKey:@"shotNumber"]; 
[context saveAction]; 

Но I`m все еще получаю:

'NSManagedObjectContext' не может ответить на '-saveAction'

ответ

1

Использование setValue:forKey:

ОБНОВЛЕНИЕ

NSManagedObjectContext имеет save способ, а не saveAction. Итак:

NSError *error = nil; 
[context save:&error] 
if (error) { 
    [NSApp presentError:error]; 
    return; 
} 
+0

Спасибо за комментарий, все еще получая сообщение об ошибке (отредактировав вопрос) –

+0

хм, что-то может быть подозрительно здесь, я все еще получаю: «NSManagedObjectContext» может не отвечать на «-save» –

+0

попытаться зарегистрировать переменную контекста , Может быть, это что-то еще? – Eimantas

1

insertNewObjectForEntityForName:@"shotName" должен быть insertNewObjectForEntityForName:@"Shots". Shots - это имя объекта. shotName - это имя атрибута объекта Shots. Кроме того, как и с именами классов Objective-C, стандартным является использование уникальных имен для объектов сущности. Таким образом, Shots должно быть Shot (рекомендуется, но не требуется).

Кроме того, если вы измените вокруг вашего файла AppName.xcdatamodel & генерировать новые NSManagedObject файлы, вы также можете получить сообщение об ошибке: модель используется для открытия магазина несовместима с той, которая используется для создания магазина при запуске приложения. Это потому, что он использует старый постоянный файл хранилища. Я называю это: AppName.sqlite, но у вас может быть другое имя для этого файла. Поиск в проекте что-то вроде:

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"AppName.sqlite"]]; 

Тогда, как только вы знаете имя, чтобы найти файл, сделайте следующее:

find ~/Library/Application\ Support/ -name AppName.sqlite 

Затем удалите файл, и строить & запустить снова.

+0

ah :(didn't work –

+0

Извините, я не смотрел код в первый раз. Просто ошибка. На этот раз я прочитал код, и я думаю, что нашел решение. Я обновил ответ. – ma11hew28

+0

спасибо за что это не единственное, что мешало ему работать :) –

Смежные вопросы