Сбой при выполнении запроса на выборку - PullRequest
0 голосов
/ 14 июня 2011

У меня произошел сбой при выполнении executeFetchRequest: ошибка:

MyApp[595] имеет активные подтверждения за пределами допустимого времени:

{(
    <SBProcessAssertion: 0x1e5d1260> identifier: Suspending process: MyApp[595] 
permittedBackgroundDuration: 10.000000 reason: suspend owner pid:29 preventSuspend
  preventThrottleDownCPU  preventThrottleDownUI

И это мой код:

NSString *predString = [NSString stringWithFormat:@"categoryId MATCHES '%@'", categoryId];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predString];
[request setPredicate:predicate];
NSError *error = nil;
NSArray* objects = [context executeFetchRequest: request error: &error];

Насколько я понимаю, выборка, выполняемая синхронно в главном потоке, заняла слишком много времени, более 10 секунд, и процесс был приостановлен.

Просматривая в интернете, я нашел отличное решение для асинхронной выборки:

http://blog.zssz.me/2010/01/asynchronous-fetch-in-core-data.html

Но мне интересно, верно ли мое предположение, и есть либолее простые решения этой проблемы.Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Вы не можете использовать оператор MATCHES с хранилищем SQL (которое вы почти наверняка используете), потому что sqlite не поддерживает регулярное выражение.Я ожидал бы, что это будет ошибка вместо тайм-аута, но, видимо, нет.

Вы хотите использовать CONTAINS или даже лучше, ==.Если у вас есть атрибут с именем catergoryID, он обычно обозначает атрибут с конкретным уникальным значением, а не атрибут с большим количеством незначительных изменений.Использование == / equals значительно ускоряет выборку.

0 голосов
/ 14 июня 2011

Ошибка довольно очевидна:)

Я попробую это в фоновом потоке и посмотрю, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...