2014-10-22 4 views
0

NSManagedObject имеет свойство Transformable, которое я использую для хранения NSMutableOrderedSet.Пользовательский объект IN NSSet NSPredicate с SQL

Этот набор содержит пользовательские объекты (не подклассы NSManagedObject), которые реализуют NSCoding и переопределяют методы isEqual: и hash.

У меня есть NSPredicate, который проверяет, содержит ли этот набор переданный объект.

Предикат в основном это:

[NSPredicate predicateWithFormat:@"%@ IN %K", theObjectToCheck, @"propertyNameForTheSet"]; 

Он работает с базой данных в памяти, но с SQL он выстреливает BAD ошибка доступа.

У меня включена диагностика.

SQL-отладки что-то вроде:

CoreData: sql: SELECT COUNT(DISTINCT t0.Z_PK) FROM ZIMPLEMENTED_ABSTRACT_ENTITY_NAME t0 WHERE (NSCoreDataStringSearch(t0.ZPROPERTYNAMEFORTHESET1, ?, 0, 0) AND t0.Z_ENT = ?) 
CoreData: details: SQLite bind[0] = theObjectToCheckAsString(not-hash) 
CoreData: details: SQLite bind[1] = 6 

Трассировка стека является:

0 ???         0x00000001eee4d8dc 0x0 + 8302942428, 
1 Spatch        0x00000001020d5ee0 main + 0, 
2 CoreData       0x000000010386ee26 _NSCoreDataStringSearch + 246, 
3 libsqlite3.dylib     0x0000000107337384 sqlite3VdbeExec + 16100, 
4 libsqlite3.dylib     0x000000010728e4ff sqlite3_step + 527, 
5 CoreData       0x0000000103820070 _execute + 112, 
6 CoreData       0x000000010381fd0b -[NSSQLiteConnection execute] + 1835, 
7 CoreData       0x0000000103879b18 -[NSSQLChannel selectCountWithFetchRequest:] + 168, 
8 CoreData       0x00000001038796b5 -[NSSQLCore countForFetchRequest:inContext:] + 405, 
9 CoreData       0x0000000103825f01 -[NSSQLCore executeRequest:withContext:error:] + 513, 
10 CoreData       0x00000001038fb4f3 __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 3331, 
11 CoreData       0x00000001039037ee gutsOfBlockToNSPersistentStoreCoordinatorPerform + 190, 
12 libdispatch.dylib     0x00000001056b17f4 _dispatch_client_callout + 8, 
13 libdispatch.dylib     0x0000000105698774 _dispatch_barrier_sync_f_invoke + 365, 
14 CoreData       0x00000001038f63d5 _perform + 197, 
15 CoreData       0x0000000103825ac8 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 504, 
16 CoreData       0x0000000103878c80 -[NSManagedObjectContext(_NSInternalAdditions) _countWithNoChangesForRequest:error:] + 288, 
17 CoreData       0x000000010387868b -[NSManagedObjectContext countForFetchRequest:error:] + 331, 

Кажется, есть сходство с: http://markmail.org/message/7cuuamyc4gcid5bb#query:+page:1+mid:h2t4o4moib3emltb+state:results enter image description here

Образец проекта можно проверить здесь : https://dl.dropboxusercontent.com/u/2935618/CustomObjectsInCoreData.zip

Любые идеи, как я мог бы разобраться в этом? Большое спасибо!

+0

Я на 99% уверен, что это невозможно, и если бы это было исполнение, это было бы ужасно. Есть ли причина, по которой вы не можете создать правильный объект данных ядра и соответствующие отношения для объектов в вашем упорядоченном наборе? –

+0

yep, если пользовательский объект расширяет nsmanagedobject и связан через связь, я могу его искать. Немного удивил, что я не могу найти строку в атрибуте, который содержит набор строк. – Nuthinking

ответ

0

Похоже, что поиск объектов в NSPredicate с SQL невозможен, если они не являются сущностями и не связаны через явное отношение в базовой модели данных.

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