2013-06-24 2 views
0

Чтобы сохранить начальное животное в зоопарке я это сделать:CoreData (MagicalRecord) возвращение неправильных значений

-(void)makePrimary:(Animal*)animal 

Zoo *currentZoo = [Zoo findFirstByAttribute:@"zooId" withValue:self.currentZooId]; 
currentZoo.primaryAnimalId = animal.animalId; 

[[NSManagedObjectContext defaultContext] saveToPersistentStoreAndWait]; 
DLog(@"primaryAnimalId: %d", currentZoo.primaryAnimalId.intValue); //logs "3" 

} 

После выполнения этого primaryAnimalId для currentZoo бревнах 3. Я использую менеджер Firefox SQLite для проверьте это. ZPRIMARYANIMALID тоже 3.

Теперь я перехожу в другой раздел приложения, где мне нужно отобразить первичное животное. Так что я делаю это:

-(Animal*)getPrimaryAnimalForCurrentZoo 
{ 

    Zoo *currentZoo = [Zoo findFirstByAttribute:@"zooId" withValue:self.currentZooId]; 
    DLog(@"primaryAnimalId: %d", currentZoo.primaryAnimalId.intValue); //logs 2 
    Animal *primaryAnimal = [Animal MR_findFirstByAttribute:@"animalId" withValue:currentZoo.primaryAnimalId]; 

    return primaryAnimal; 

} 

К моему огорчению, я получаю «2» для primaryAnimalId, и, таким образом, возвращается неправильное животное. «2» - это предыдущее значение животного, прежде чем я его изменю с помощью makePrimary:. currentZooId равен 0 в обоих методах.

Что я не понимаю, так это то, как я могу получить неправильное значение из Core Data, когда я могу четко видеть правильное значение в настоящее время в базе данных (в SQLite Manager). Как это возможно и как я могу это исправить?

ответ

0

Вы обновили self.currentZooId, чтобы отразить ваши изменения?


Update: Итак, вы спрашиваете, для первой записи в наборе данных здесь. Дело в том, что вы не указываете заказ. То есть findFirst просто запрашивает хранилище данных для всех, а затем просто возвращает первое в списке (посмотрите на код для более подробной информации). Поскольку этот список может быть в любом порядке, вы получите то, что хранилище данных дает вам в конкретном случае. То, что вы хотите сделать, это добавить параметр sort для findFirst, чтобы убедиться, что вы всегда получаете ожидаемый элемент. Посмотрите на заголовки, чтобы найти правильный метод firstFirst с параметром sort.

+0

Да, оно имеет значение 0 в обоих методах. – soleil