I'm working on an app and it's my first time using Core Data and everything was going smooth until I hit a rock.
Here is my stack trace
2015-07-20 23:39:41.030 Small Things[290:21425] -[Entity1 length]: unrecognized selector sent to instance 0x13769ecb0
2015-07-20 23:39:41.031 Small Things[290:21425] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Entity1 length]: unrecognized selector sent to instance 0x13769ecb0'
*** First throw call stack:
(0x184eaff94 0x199853f2c 0x184eb6cac 0x184eb3c4c 0x184db725c 0x184d97798 0x18a4cce20 0x10005f5f0 0x100063730 0x18a7fdb90 0x18a7fdce8 0x18a7ee890 0x18a802910 0x18a5abe78 0x18a4be4fc 0x189cfad04 0x189cf5920 0x189cf57e0 0x189cf4e80 0x189cf4bd4 0x189cee34c 0x184e66f44 0x184e64cbc 0x184e650ec 0x184d91800 0x18fe1f170 0x18a52a5e8 0x10005f4a0 0x19a08e8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
and here is the code that caused the problem:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Fetch data from persistence
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:#"Entity1"];
NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] initWithEntityName:#"Entity2"];
self.arr1 = [[managedObjectContext executeFetchRequest:fetchRequest error:nil]mutableCopy];
self.arr2 = [[managedObjectContext executeFetchRequest:fetchRequest2 error:nil]mutableCopy];
[self.tableView reloadData];
}
I really don't get what's wrong.
Thanks in advance
Usually, this error is about the entity name you're using is not kind of NSString, so the code believes that you are using some type else (not NSString).
But it could be also, that is the model associated with the context’s persistent store coordinator does not contain an entity named Entity1.
Related
I am getting the following exception, which is terminating the app.
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7abe4f90'
Following is the code:
- (NSMutableData*)dataForConnection:(URLConnection*)connection {
NSMutableData *data = [receivedData objectForKey:connection.tagKey]; // Exception Here
return data;
}
Could anyone please suggest how to fix it? Thank you in advance!
Problem is due to not allocating receivedData properly, since you have declared it as instance variable, so you should make it using the property declaration like this:
#property(nonatomic, strong) NSMutableDictionary *receivedData;
This will ensure that receivedData does not get released and reference this using self.receivedData in your code.
Maybe this is helpful
[__NSArrayM objectForKey:]
NSArray have not method called objectForKey:
Your object receivedData is NSArray class , change to NSDictionary.
I have a core data structure where contacts are parsed from server and associated with an Account entity.To create crash I:
1. login with user A and create a contact
2. login with user B and crash occurs.
Obviously there is an empty NSArray causing this crash.
The crash occurs while looping through each of the contacts in the server data with performBlock:
NSManagedObjectContext *mainMOC = self.managedObjectContext;
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
//NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
[moc setParentContext:mainMOC];
[moc setUndoManager:nil];
BCRAccount *account2 = (BCRAccount*)[moc objectWithID:[self.loggedInAccount objectID]];
//[moc performBlockAndWait:^{
[moc performBlock:^{
//parse each contact
Also i call a fetch request for each contact in a separate method that references the child managed object:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:[BCRContact entityName]];
NSManagedObjectContext *managedObjectContext = childmoc;
NSArray *fectchresult = [managedObjectContext executeFetchRequest:fetch error:&error];
I'm wondering if it is a to-many or to-one relationship problem. There must be some left over data from the first login that is contributing to the 2nd login crash.
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArray0 objectAtIndex:]: index 15 beyond bounds for empty NSArray'
*** First throw call stack:
(0x18be921c0 0x18a8cc55c 0x18bdfd3dc 0x10024c154 0x1920301b4 0x1920303e4 0x19201d98c 0x192035448 0x191dd17e8 0x191cea220 0x18f1aa188 0x18f19ee64 0x18f19ed24 0x18f11b7ec 0x18f142c58 0x18f143678 0x18be3f7dc 0x18be3d40c 0x18be3d89c 0x18bd6c048 0x18d7f2198 0x191d582fc 0x191d53034 0x10008e578 0x18ad505b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
lastly before all of this parsing happens i see this error as well when a separate service is called:
2016-11-11 12:22:34.660266 AtEventUniversal[2223:781261] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
Thanks for any tips on this mess.
In a situation where you dont know whats causing the crash, you should use Exception Breakpoint... and Symbolic breakpoint... to catch the exception.
Help please to solve the problem - I do not understand why there is an error - unrecognized selector send to instance.
The error occurs when this code in AppDelegate is executed:
TMMonth *m = [NSEntityDescription insertNewObjectForEntityForName:#"TMMonth" inManagedObjectContext:self.managedObjectContext];
m.paymentMonth=#"month";
[self.managedObjectContext save:nil];
reason: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TMMonth name]: unrecognized selector sent to instance 0x7f993bdbbb00'
But in my code there is no selector 'name' in TMMonth class.
https://github.com/maks-84/paymentApp.git
error occurs when execute code in AppDelegate
TMMonth *m = [NSEntityDescription insertNewObjectForEntityForName:#"TMMonth" inManagedObjectContext:self.managedObjectContext];
m.paymentMonth=#"month";
[self.managedObjectContext save:nil];
reason: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TMMonth name]: unrecognized selector sent to instance 0x7f993bdbbb00'
But in my code no selector 'name' in TMMonth class
core data getting on my nerves. i' m deleting old data and want to insert new data received from server.
now the deleting part gives a "sigabort":
-[NSManagedObjectContext delete:]: unrecognized selector sent to instance 0x522f550
2013-09-27 14:05:56.592 * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObjectContext delete:]: unrecognized selector sent to instance 0x522f550'
* First throw call stack:
(0x320f82a3 0x39d4797f 0x320fbe07 0x320fa531 0x32051f68 0x1b6c53 0x1868e5 0x3a15f11f 0x3a16d259 0x3a16d3b9 0x3a193a11 0x3a1938a4)
libc++abi.dylib: terminate called throwing an exception
deleting happens in background and nsmanagedobjectcontext is a privet concurrency type
i printed the pointer for context and object context
po context NSManagedObjectContext: 0x522f550
and
po tmpCon.managedObjectContext NSManagedObjectContext: 0x522f550>
and the code for deleting is:
NSError *errorAllCons = nil;
NSFetchRequest *allevents = [[NSFetchRequest alloc] init];
[allevents setEntity:[NSEntityDescription entityForName:#"TEventContact" inManagedObjectContext:context]];
NSArray *allCons = [context executeFetchRequest:allevents error:&errorAllCons];
for (TEventContact *tmpCon in allCons)
{
[context delete:tmpCon];
}
and it crashes on [context delete:tmpCon];
can someone let me know what am i doing wrong?
Use
[context deleteObject:tmpCon];
It will solve the problem
do it like this for deleting an object permanently
for (TEventContact *tmpCon in allCons)
{
[context deleteObject:tmpCon] /// for deleting object in context
}
[context save]; /// to reflect changes in database you need to save that context
without saving the context it doesn't reflect on data base and that may cause DIRTY_READ for another context
I'm setting up a very simple NSIncrementalStore example using AFIncrementalStore.
The idea is to setup a NSManagedObjectContext in the AppDelegate (using the ordinary template provided by Apple, with changes for my IncrementalStore), do a fetch with no predicate or sort descriptor and NSLog the one fetched entity object.
Everything works great until I ask for any entity attribute. It crashes with the following message:
2013-07-22 16:34:46.544 AgendaWithAFIncrementalStore[82315:c07] -[_NSObjectID_id_0 eventoId]: unrecognized selector sent to instance 0x838b060
2013-07-22 16:34:46.545 AgendaWithAFIncrementalStore[82315:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSObjectID_id_0 eventoId]: unrecognized selector sent to instance 0x838b060'
My xcdatamodeld is correctly setted up. The NSManagedObject class is generated and imported on the delegate. When I do a breakpoint before the NSLog I can see the fetched objects IDs. The webservice is giving me back the correct data.
My AppDelegate code:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[self.window makeKeyAndVisible];
[[NSNotificationCenter defaultCenter] addObserver:self selector:#selector(remoteFetchHappened:) name:AFIncrementalStoreContextDidFetchRemoteValues object:self.managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:#"Agenda" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = entityDescription;
fetchRequest.predicate = nil;
NSError *error;
[self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
return YES;
}
// Handle the notification posted when the webservice returns objects
- (void)remoteFetchHappened:(NSNotification *)aNotification
{
NSArray *fetchResult = [[aNotification userInfo] objectForKey:#"AFIncrementalStoreFetchedObjectIDs"];
Agenda *agenda = (Agenda *)[fetchResult lastObject];
// THIS IS WHERE IT BREAKS...
NSLog(#"Agenda: %#", agenda.eventoId);
}
Any ideas on how to make this piece of code return the attribute I'm asking for?
AFNetworking is giving you managed object IDs, that is, instances of NSManagedObjectID. You can't look up managed object property values on that-- you have to get the managed object for the ID first. That's what _NSObjectID_id_0 means in the error message-- you're trying to get
eventoId on an NSManagedObjectID, and it has no idea what that is.
You get the managed object by looking it up in the managed object context. Something like
NSError *error = nil;
NSManagedObject *myObject = [context existingObjectWithID:objectID error:error];
if (myObject != nil) {
// look up attribute values on myObject
}