Свойства iPhone CoreData: изменения в управляемых объектах происходят слишком медленно - PullRequest
0 голосов
/ 29 августа 2010

В моем приложении для iPhone есть модель CoreData, которая связана с базой данных SQL, содержащей более 50 тыс. Записей.Когда я генерирую записи классов, Xcode использует директиву @dynamic для свойств.У меня есть свойство с именем «ISFAV», тип NSNumber (CoreData не использует BOOL или Integer, он использует типы объектов).Коротко говоря, я изменяю свойство ISFAV, когда пользователь нажимает на кнопку следующим образом:

 if (![record.ISFAV intValue]) 

record.ISFAV = [NSNumber numberWithInt: 1];

else record.ISFAV =[NSNumber numberWithInt: 0];

Довольно просто.Но если я попытаюсь нажать несколько раз на одну и ту же кнопку последовательно, iPhone займет слишком много времени (кнопка остается в состоянии удержания в течение некоторого времени, которое постепенно увеличивается).Это происходит, даже если я изменяю запись, последовательно добавляя \ удаляя множество записей из избранного (вместо добавления \ удаления одной и той же записи из избранного).

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

Правильно ли использовать директиву синтеза для методов доступа в CoreData?

Большое спасибо!

@ edit При использовании директивы synthesize в модель CoreData не вносятся изменения при сохранении контекста: - \ Проблема все еще не решена: - \

1 Ответ

0 голосов
/ 01 сентября 2010

@dynamic - это флаг, который просто сообщает компилятору, что метод будет существовать во время выполнения и не предупреждать об этом сейчас. Вы не должны использовать @synthesize со свойствами Core Data.

Откуда вы знаете, что ваша точка доступа связана с настройкой свойства Core Data? Вы профилировали код? По моему опыту, изменение одного атрибута в Базовых данных не будет медленным, это будет 1/1000 секунды или быстрее. Сохраняете ли вы на диск каждый раз, когда меняете это свойство? Вы делаете что-то еще в вызове?

Я бы сначала профилировал код и выяснил, где в действительности находится точка доступа. Используйте инструменты и подтвердите.

...