Reputation: 2132
I am new to iphone development. I am trying to store some data using iphone core data. when i try to save i am getting error like.
Detected an attempt to call a symbol in system libraries that is not present on the
_Unwind_Resume called from function -[NSSQLAdapter
_newSelectStatementWithFetchRequest:ignoreInheritance:] in image CoreData.
2012-05-28 12:05:38.179 FYPV1[6460:207] *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: 'Unimplemented SQL generation for predicate
(surname MATCHES $search_surname)'
*** Call stack at first throw:
(
0 CoreFoundation 0x02668b99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x027b840e objc_exception_throw + 47
2 CoreData 0x0003be86 -[NSSQLGenerator generateSQLStatementForFetchRequest:ignoreInheritance:countOnly:] + 1254
3 CoreData 0x0003b6f0 -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 480
4 CoreData 0x0003b501 -[NSSQLAdapter newSelectStatementWithFetchRequest:] + 49
5 CoreData 0x0003b3ae -[NSSQLCore newRowsForFetchPlan:] + 430
6 CoreData 0x0003ab09 -[NSSQLCore objectsForFetchRequest:inContext:] + 297
7 CoreData 0x0003a6fe -[NSSQLCore executeRequest:withContext:error:] + 206
8 CoreData 0x000e891c -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 1084
9 CoreData 0x00037897 -[NSManagedObjectContext executeFetchRequest:error:] + 359
10 FYPV1 0x0000715f -[Contacts saveContacts:] + 367
11 UIKit 0x001fc7f8 -[UIApplication sendAction:to:from:forEvent:] + 119
12 UIKit 0x00287de0 -[UIControl sendAction:to:forEvent:] + 67
13 UIKit 0x0028a262 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
14 UIKit 0x00288e0f -[UIControl touchesEnded:withEvent:] + 458
15 UIKit 0x002203d0 -[UIWindow _sendTouchesForEvent:] + 567
16 UIKit 0x00201cb4 -[UIApplication sendEvent:] + 447
17 UIKit 0x002069bf _UIApplicationHandleEvent + 7672
18 GraphicsServices 0x02f48822 PurpleEventCallback + 1550
19 CoreFoundation 0x02649ff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
20 CoreFoundation 0x025aa807 __CFRunLoopDoSource1 + 215
21 CoreFoundation 0x025a7a93 __CFRunLoopRun + 979
22 CoreFoundation 0x025a7350 CFRunLoopRunSpecific + 208
23 CoreFoundation 0x025a7271 CFRunLoopRunInMode + 97
24 GraphicsServices 0x02f4700c GSEventRunModal + 217
25 GraphicsServices 0x02f470d1 GSEventRun + 115
26 UIKit 0x0020aaf2 UIApplicationMain + 1160
27 FYPV1 0x00001e59 main + 121
28 FYPV1 0x00001dd5 start + 53
)
terminate called after throwing an instance of 'NSException'
How to solve this problem .
Here is my code for saving data.
NSError *error;
NSDictionary *subs = [NSDictionary
dictionaryWithObjectsAndKeys:fetchContact.first_name, @"search_firstname",fetchContact.surname,@"search_surname", nil];
NSFetchRequest *fetchRequestCheckNil =
[managedObjectModel fetchRequestFromTemplateWithName:
@"Fetchaddcontact" substitutionVariables:subs];
NSArray *fetchedObjects=[context executeFetchRequest:fetchRequestCheckNil error:nil];
if ([fetchedObjects count]>0) {
for (ENTITYADDCONTACTS *contactDetails
in fetchedObjects) {
[self updateDBModel:contactDetails];
}
}
else {
ENTITYADDCONTACTS *contactDetails;
contactDetails = [NSEntityDescription
insertNewObjectForEntityForName:@"ENTITYADDCONTACTS"
inManagedObjectContext:context];
[self updateDBModel:contactDetails];
}
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
Upvotes: 2
Views: 4847
Reputation: 2779
According to Predicate Programming Guide Constraints and Limitations section you cannot use MATCHES keyword with sqlite persistent store.
Quote:
The matches operator uses regex, so is not supported by Core Data’s SQL store— although it does work with in-memory filtering.
In your case I would use BEGINSWITH or LIKE. Note, that BEGINSWITH has a performance edge, so I recommend using that whenever possible.
Here are the available predicate comparisons for strings:
String comparisons are by default case and diacritic sensitive. You can modify an operator using the key characters c and d within square braces to specify case and diacritic insensitivity respectively, for example firstName BEGINSWITH[cd] $FIRST_NAME.
BEGINSWITH
The left-hand expression begins with the right-hand expression.
CONTAINS
The left-hand expression contains the right-hand expression.
ENDSWITH
The left-hand expression ends with the right-hand expression.
LIKE
The left hand expression equals the right-hand expression: ? and * are allowed as wildcard characters, where ? matches 1 character and * matches 0 or more characters. In Mac OS X v10.4, wildcard characters do not match newline characters.
MATCHES
The left hand expression equals the right hand expression using a regex-style comparison according to ICU v3 (for more details see the ICU User Guide for Regular Expressions).
The exception here is MATCHES which cannot be used with sqlite persistent store as I said before. On top of those you can use plain == for strict equality comparison.
Upvotes: 1