Я пытался разработать фрагмент кода Core Data и столкнулся с проблемами. В одной версии моего кода все работает, но после того, как я пытался отшлифовать код, у меня есть старая версия, и вдруг она не работает. Я не изменил этот класс, поэтому я озадачен.
В оригинальной версии я получаю вывод, который можно увидеть в нижней части этого поста, это только одна строка, которая является базой данных. В этой версии я ничего не получаю.
У меня такое чувство, что могут быть некоторые проблемы со связью между приложением и Core Data. Я сделал переименование приложения через «Проект -> Переименовать», так что, возможно, в этом причина этой проблемы? Боюсь, я не знаю, где искать.
РЕДАКТИРОВАТЬ: Только что увидел, что xcdatamodel имеет старое имя!
EDIT2: переименовал копию старой версии и получил ту же проблему, поэтому я предполагаю, что причиной этой проблемы является переименование приложения. Теперь мне интересно, как выровнять базу данных Core Data с новым именем?
// Define qContext
NSManagedObjectContext *qContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"questions" inManagedObjectContext:qContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) {
...
2011-01-24 20: 58: 38.969 FamQuiz_v2 [27431: 207] fetchedObjects: (
"(сущность: вопросы; id: 0x7088740; данные:)", ...
=====================================
=============== ОБНОВЛЕНИЕ ==============
Я проверил, есть ли какие-либо данные в других параметрах с помощью следующего кода:
//=========PREPARE CORE DATA DB===========//
if (managedObjectContext == nil) { managedObjectContext = [(FamQuiz_v2AppDelegate *)
[[UIApplication sharedApplication] delegate] managedObjectContext]; }
// Define qContext
NSManagedObjectContext *qContext = [self managedObjectContext];
NSLog(@" ");
NSLog(@"qContext: %@", qContext);
NSLog(@" ");
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"questions" inManagedObjectContext:qContext];
NSLog(@" ");
NSLog(@"entity: %@", entity);
NSLog(@" ");
[fetchRequest setEntity:entity];
NSLog(@" ");
NSLog(@"fetchRequest: %@", fetchRequest);
NSLog(@" ");
//>>>>ERROR COMING HERE
NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"fetchedObjects: %@", fetchedObjects);
NSLog(@"====STOP====");
Результат ниже и указывает, что у меня есть доступ к базе данных, или? Но все еще нет "fetchedObjects":
2011-01-24 22: 27: 54.094 FamQuiz_R0_2 [29523: 207] qContext:
2011-01-24 22: 27: 54.095 FamQuiz_R0_2 [29523: 207]
2011-01-24 22: 27: 54.095 FamQuiz_R0_2 [29523: 207]
2011-01-24 22: 27: 54.120 FamQuiz_R0_2 [29523: 207] entity: () имя вопросов, managedObjectClassName NSManagedObject, вопросы переименованияIdentifier, isAbstract 0, имя высшего уровня (ноль), свойства {
idQ = "(), имя idQ, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier idQ, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 200, attributeValueClassName NSNumber, defaultValue (null)" ;
qDiff = "(), имя qDiff, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier qDiff, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 200, attributeValueClassName NSNumber, defaultValue (null)" ;
qNrAccess = "(), имя qNrAccess, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier qNrAccess, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 200, attributeValueClassName NSNumber, attributeValue (null)" ;
qRegDate = "(), имя qRegDate, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier qRegDate, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 900, attributeValueClassName NSDate, defaultValue (null)" ;
qRightAnswer = "(), имя qRightAnswer, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier qRightAnswer, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, defaultValue) () ;
qWrongAnswer1 = "(), имя qWrongAnswer1, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier qWrongAnswer1, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString по умолчанию, default ;
qWrongAnswer2 = "(), имя qWrongAnswer2, isOptional 0, isTransient 0, вопросы сущности, renamingIdentifier qWrongAnswer2, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, default ;
question = "(), имя вопроса, isOptional 0, isTransient 0, вопросы сущности, вопрос renamingIdentifier, предикаты проверки (\ n), предупреждения (\ n), versionHashModifier (null), attributeType 700, attributeValueClassName NSString, defaultValue (null)" ;
}, субстанции {
}, userInfo {
}, versionHashModifier (null)
2011-01-24 22: 27: 54.121 FamQuiz_R0_2 [29523: 207]
2011-01-24 22: 27: 54.123 FamQuiz_R0_2 [29523: 207]
2011-01-24 22: 27: 54.123 FamQuiz_R0_2 [29523: 207] fetchRequest: (сущность: вопросы; предикат: ((ноль)); sortDescriptors: ((ноль)); тип: NSManagedObjectResultType;)
2011-01-24 22: 27: 54.124 FamQuiz_R0_2 [29523: 207]
2011-01-24 22: 27: 54.125 FamQuiz_R0_2 [29523: 207] fetchedObjects: (
)
2011-01-24 22: 27: 54.126 FamQuiz_R0_2 [29523: 207] ==== STOP ====
=========== UPDATE2 ==========
Вот код:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"FamQuiz_v2" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
=============== ОБНОВЛЕНИЕ-3 ==============
Я действительно озадачен этой проблемой, но проверил, чтобы переименовать приложение обратно к исходному имени, и затем я работал. Для меня это означает, что где-то есть связь, которую я не могу найти, и я искал.
Я ДЕЙСТВИТЕЛЬНО хотел бы понять, как переименовать приложение с Core Data, не теряя соединение с базой данных.
Я был бы очень признателен, если бы кто-нибудь смог пролить свет на это, так как мне нужно было бы его переименовать.
=============== ОБНОВЛЕНИЕ-4 ==============
Просто чтобы дать обновление по этой проблеме, мне так и не удалось заставить эту штуку работать, поэтому я решил использовать «возможность» переписать все приложение. Может показаться жестким способом решения этой проблемы, но, будучи очень новым для программирования, это также позволило мне очистить код.
Мне все еще очень интересно, как решить проблему.