Иногда я получал ошибку, говоря, что нераспознанный селектор objcType
был отправлен объекту NSDate
:
2011-06-11 14: 44: 51.589 MyApp [354: 307] - [__ NSDate objCType]: нераспознанный селектор отправлен в экземпляр 0x4b0d5a0
2011-06-11 14: 44: 51.732 MyApp [354: 307] * Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '- [__ NSDate objCType]: нераспознанный селектор отправлен в экземпляр 0x4b0d5a0'
Я загружаю данные из sqLite с помощью Core Data, вызывая [[self fetchedResultsController] performFetch:&error]
. Я использую предикат, который обеспечивает выборку единственных (NSManaged) объектов, имеющих свой атрибут kickoffTime
типа NSDate
в указанном диапазоне:
NSDate * fromDate = ...
NSDate * toDate = ...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"( ( %@ <= kickoffTime +0 ) && ( kickoffTime +0 <= %@ ) )", fromDate, toDate];
// Add the predicate to the fetchRequest
[[[self fetchedResultsController] fetchRequest] setPredicate:predicate];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error])
{
...
}
Я действительно не знаю, в чем может быть проблема. Я, вероятно, каким-то образом неправильно использую предикат основных данных, заставляя фреймворк отправлять сообщение objCType
объекту NSDate, чтобы узнать тип объекта. Есть ли у кого-нибудь предложения?
Вот несколько вещей, которые я заметил:
- объект NSDate, на который отправляется проблемный селектор, является атрибутом kickoffTime моего NSManagedObject
- это происходит довольно случайно, поэтому воспроизвести его нелегко
- объект NSDate, которому отправляется нераспознанный селектор, кажется действительным объектом (я мог бы распечатать его в gdb)
Вот вершина стопки:
0 CoreFoundation 0x3587a987 __exceptionPreprocess + 114
1 libobjc.A.dylib 0x34a8249d objc_exception_throw + 24
2 CoreFoundation 0x3587c133 - [NSObject (NSObject) doesNotRecognizeSelector:] + 102
3 CoreFoundation 0x35823aa9 пересылка + 508
4 CoreFoundation 0x35823860 _CF_forwarding_prep_0 + 48
5 Foundation 0x3121ac69 + [_ NSPredicateUtilities add: to:] + 40
6 Foundation 0x31221225 - [выражение NSFunctionExpressionValueWithObject: context:] + 688
7 Foundation 0x3117e045 - [NSComparisonPredicate оценитьWithObject: substitutionVariables:] + 176
8 Foundation 0x312255fb - [NSCompoundPredicateOperator AssessmentPredicates: withObject: substitutionVariables:] + 186
9 Foundation 0x3121e43f - [NSCompoundPredicate оценитьWithObject: substitutionVariables:] + 186
10 Foundation 0x3117df8d - [NSPredicate оценитьWithObject:] + 16
11 CoreData 0x356e8edf - [NSManagedObjectContext executeFetchRequest: error:] + 2014
12 CoreData 0x357a041b - [NSFetchedResultsController performFetch:] + 766
13 MyApp 0x000195ef - [MatchesCalendarDataSource loadMatchesFrom: to: delegate:] + 138
+0
проблему или нет, но его нужно удалить, потому что он не выполняет никакой функции в предикате. Это просто беспорядок. 16.08.2011