2015-01-19 5 views
0

Я заполняю основной объект данных программным путем.Безумие во время создания объекта основных данных

У меня есть массив как это:

NSArray *formats = @[ 
         @"6 x 5", 
         @"5.3 x 4.3", 
         @"4 x 3", 
         @"5 x 3.5", 
... 

Теперь я перечислю, что и заполнить объект

for (int i=0; i<[formats count]; i++) { 

    NSString *format = formats[i]; 
    Format *oneFormat = [Format formatWithString:format inManagedObjectContext:managedObjectContext]; 

    // ... bla bla 

    } 

Внутри класса Формат У меня есть

+ (Format *)formatWithString:(NSString *)string inManagedObjectContext:(NSManagedObjectContext *)context 
{ 

    Format *aFormat = nil; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    request.entity = [NSEntityDescription entityForName:NSStringFromClass([self class]) 
           inManagedObjectContext:context]; 


    NSPredicate *predicate = [NSPredicate predicateWithFormat: 
           @"(name == %@)", string]; 

Это проблема , В одном месте внутри цикла for У меня

format = @"5.3 x 4.3" 

Затем эта линия выполнена

Format *oneFormat = [Format formatWithString:format inManagedObjectContext:managedObjectContext]; 

в теории, format = @"5.3 x 4.3" передается Format formatWithString.

Проблема в том, что Format formatWithString получает следующую строку: @"4 x 3.5".

Что ??? Метод называется @"5.3 x 4.3" и принимает @"4 x 3.5"?

И вот удивительная часть. Если я po predicate я вижу

name == "5.3 x 4.3 cm" 

Это правильное значение. Но когда запись сохранена, неправильное значение будет сохранено.

Этот @"4 x 3.5" был старым форматом, который я использовал для кода, давным-давно. Это была опечатка. Я удалил все упоминания этого формата из своего кода. Я проверил это 10 раз. Нет @"4 x 3.5".

Я удалил все полученные данные. Каждый раз, когда я создаю базу данных, он содержит эту запись @"4 x 3.5", которой не должно быть.

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

ответ

2
  1. Я подозреваю, что вы не удаляете файл SQLite при сбросе всего. Если вы находитесь на iOS, то он будет находиться в симуляторе или на устройстве. Также удаляется приложение из устройства/sim. Если вы находитесь на OS X, отследите, где хранится файл SQLite, и удалите его.

  2. Выполнение обновления/вставки запросов, подобных этому, ужасно дорого. Я бы порекомендовал делать ОДИН выбор для всех объектов, в которых вам нужно принять решение. В противном случае ваша производительность будет ужасной.

+0

# 2 дайте мне идею изменить имена переменных внутри класса Format и решить эту проблему. Благодарю. – SpaceDog

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