У меня есть простой метод, который использует NSPredicate для возврата количества строк, где comment.length > 0.
Проблема в том, что я обнаружил, что когда столбец комментариев начинается с + - * или /, свойство длины всегда оценивается как 0, и поэтому строка исключается из подсчета.
Я открыл таблицу в браузере SQLite и проверил, что столбец является VARCHAR. Использование запроса SQLite для проверки длины строки работает нормально (LENGTH(ZComments) > 0), так что это должно быть проблемой CoreData.
Вот моя функция...
-(int)getCommentsCount{
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setIncludesSubentities:YES];
[request setEntity:[NSEntityDescription entityForName:@"InspectionRecord" inManagedObjectContext:managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(comments.length > 0)"];
[request setPredicate:predicate];
NSError *err;
NSUInteger count = [managedObjectContext countForFetchRequest:request error:&err];
//count is ALWAYS 0 if 'comments' starts with + - * or / WHYYY???
return count;
}
Я смог обойти это, проверив пустую/нулевую строку вместо использования .length, но мне очень хотелось бы знать, почему .length терпит неудачу, когда строка начинается с определенных символов.
Это случилось с кем-нибудь?
-(NSUInteger)commentsCount
. Сопоставьте тип возвращаемого значения-countForFetchRequest:error:
и не начинайте имена методов сget
, если только они косвенно не возвращают несколько элементов (Соглашения об именах какао). - person Hal Mueller   schedule 31.03.2014