Can someone tell me what type of crash this is? (i.e. Out of memory?)
I received this crash log but I have no idea what the problem is.
Could I wrap the code in a try catch block and at least handle this gracefully.
I don't have any steps from a user and I can't get my iOS device to crash in this code.
Thread 0 name: Dispatch queue: com.apple.assetsd.sharedPersistentStoreCoordinator
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3339f32c __pthread_kill + 8
1 libsystem_c.dylib 0x376e7f54 pthread_kill
2 libsystem_c.dylib 0x376e0fe4 abort
3 libc++abi.dylib 0x33384f64 abort_message + 40
4 libc++abi.dylib 0x33382346 _ZL17default_terminatev + 18
5 libobjc.A.dylib 0x332b72dc _objc_terminate
6 libc++abi.dylib 0x333823be _ZL19safe_handler_callerPFvvE + 70
7 libc++abi.dylib 0x33382372 __cxxabiv1::__terminate(void (*)()) + 2
8 libc++abi.dylib 0x33382882 __cxa_call_terminate + 46
9 libc++abi.dylib 0x333832ac __gxx_personality_sj0 + 968
10 libunwind.dylib 0x33170a7e unwind_phase2 + 66
11 libunwind.dylib 0x33170c0e _Unwind_SjLj_Resume + 122
12 PhotoLibraryServices 0x324d99ea -[PLPhotoLibrary(Protected) loadDatabase]
13 PhotoLibraryServices 0x324a217e -[PLPhotoLibrary initWithPath:canTriggerDatabaseUpdate:]
14 PhotoLibraryServices 0x324e919e __42+[PLSharedPhotoLibrary sharedPhotoLibrary]_block_invoke_0
15 libdispatch.dylib 0x347c5570 dispatch_once_f$VARIANT$up
16 PhotoLibraryServices 0x324e915c +[PLSharedPhotoLibrary sharedPhotoLibrary]
17 PhotoLibraryServices 0x324aa068 __withSavedPhotosAlbumUUID_block_invoke_0
18 libdispatch.dylib 0x347c5570 dispatch_once_f$VARIANT$up
19 PhotoLibraryServices 0x324a9430 withSavedPhotosAlbumUUID
20 PhotoLibraryServices 0x324a9372 PLSaveImageToCameraRoll
21 UIKit 0x30b9f1ce UIImageWriteToSavedPhotosAlbum
Here is the code:
- (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info {
NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
UIImage *originalImage, *editedImage, *imageToSave;
// Handle a still image capture
if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0)
== kCFCompareEqualTo) {
editedImage = (UIImage *) [info objectForKey:
UIImagePickerControllerEditedImage];
originalImage = (UIImage *) [info objectForKey:
UIImagePickerControllerOriginalImage];
if (editedImage) {
imageToSave = editedImage;
} else {
imageToSave = originalImage;
}
if (imagePickerSourceType == UIImagePickerControllerSourceTypeCamera) {
// Save the new image (original or edited) to the Camera Roll
UIImageWriteToSavedPhotosAlbum (imageToSave, nil, nil , nil);
}
}
UIImageWriteToSavedPhotosAlbum (imageToSave, nil, nil , nil);
I cannot get it to crash on my device or I would have a better chance of figuring this out. This is a crash log from iTunes Connect.
Related
[__NSArrayM relatedObjectDidChange]: unrecognized selector sent to instance
error Class: NSInvalidArgumentException
the crash report stackTrace:
0 CoreFoundation 0x33d153e7 <redacted> + 162
1 libobjc.A.dylib 0x3ba06963 objc_exception_throw + 30
2 CoreFoundation 0x33d18f31 <redacted> + 0
3 CoreFoundation 0x33d1764d <redacted> + 392
4 CoreFoundation 0x33c6f208 _CF_forwarding_prep_0 + 24
5 EventKit 0x3440af03 <redacted> + 30
6 EventKit 0x34410225 <redacted> + 396
7 EventKit 0x34410095 <redacted> + 28
8 EventKit 0x3440d3fd <redacted> + 396
9 Calendar 0x000f10a5 -[createNewEventView editEvent:] + 1696
10 UIKit 0x35c0f087 <redacted> + 70
11 UIKit 0x35c0f111 <redacted> + 120
12 UIKit 0x35c0f087 <redacted> + 70
13 UIKit 0x35c0f03b <redacted> + 30
14 UIKit 0x35c0f015 <redacted> + 44
15 UIKit 0x35c0e8cb <redacted> + 502
16 UIKit 0x35c0edb9 <redacted> + 488
17 UIKit 0x35b375f9 <redacted> + 524
18 UIKit 0x35b248e1 <redacted> + 380
19 UIKit 0x35b241ef <redacted> + 6198
20 GraphicsServices 0x3783b5f7 <redacted> + 590
21 GraphicsServices 0x3783b227 <redacted> + 34
22 CoreFoundation 0x33cea3e7 <redacted> + 34
23 CoreFoundation 0x33cea38b <redacted> + 138
24 CoreFoundation 0x33ce920f <redacted> + 1382
25 CoreFoundation 0x33c5c23d CFRunLoopRunSpecific + 356
26 CoreFoundation 0x33c5c0c9 CFRunLoopRunInMode + 104
27 GraphicsServices 0x3783a33b GSEventRunModal + 74
28 UIKit 0x35b782b9 UIApplicationMain + 1120
29 Calendar 0x000a9bbf main + 66
30 Calendar 0x0003a600 start + 40
What does such error means, and what is the possibilities for such error?
My implementation of editEvent method:
-(void) editEvent:(EKSpan )span
{
EKEvent * newEditingEvent = self.EventToEdit;
CalendarAppDataObject* theDataObject = [self theAppDataObject];
if(eventCalendar != nil && theDataObject.selectedCalendarsForDisplayData != nil){
NSArray *arrayDataUnarchiver =(NSArray *) [NSKeyedUnarchiver unarchiveObjectWithData:theDataObject.selectedCalendarsForDisplayData];
NSMutableSet * uniqueId = [[NSMutableSet alloc ] initWithArray:arrayDataUnarchiver];
[uniqueId addObject:eventCalendar.calendarIdentifier];
NSArray * selectedCal = [uniqueId allObjects];
NSData *arrayDataArchiver = [NSKeyedArchiver archivedDataWithRootObject:selectedCal];
theDataObject.selectedCalendarsForDisplayData = arrayDataArchiver;
//save selected to database
NSError *error;
self.managedObjectContext = theDataObject.managedObjectContext;
NSManagedObjectContext *context = [self managedObjectContext];
// **** log objects currently in database ****
// create fetch object, this objects fetch's the objects out of the database
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:#"Settings" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects= [context executeFetchRequest:fetchRequest error:&error] ;
for (NSManagedObject *info in fetchedObjects)
{
[info setValue:arrayDataArchiver forKey:#"selectedCalendarsForDisplayData"] ;
}
//this is for comitting changes to core data
[context save:&error];
[fetchRequest release];
[uniqueId release];
}
NSString * eventNotesString = #"";
if(self.eventNotes != nil)
{
eventNotesString = self.eventNotes;
}
newEditingEvent.notes = [EventsDataUtil generateEventsNoteForSavingColor:eventNotesString colorToSave:self.eventBackColor];
if(self.eventRecurrenceRule != nil)
{
NSArray * RecRulesArray = [[[NSArray alloc ] initWithObjects:self.eventRecurrenceRule, nil]autorelease];
if(theDataObject.isRepeatChanged)
{
[newEditingEvent setRecurrenceRules:RecRulesArray];
}
}else
{
[newEditingEvent setRecurrenceRules:nil];
}
if([[ self.eventTitle stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:#""])
{
self.eventTitle = #"New Event";
}
newEditingEvent.title = self.eventTitle;
if(isLocationPhoneNumber)
{
NSString * PhoneLocationString = #"tel:";
PhoneLocationString = [PhoneLocationString stringByAppendingFormat:#"%#", [self.contactPhoneNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
newEditingEvent.location = PhoneLocationString;
}
else
{
newEditingEvent.location = self.eventLocation;
}
newEditingEvent.startDate = self.eventStartDate;
newEditingEvent.endDate =self.eventEndDate;
newEditingEvent.allDay = self.eventAllDay;
newEditingEvent.calendar = self.eventCalendar;
newEditingEvent.URL = self.eventURL;
// repeat and alert
NSArray * Alarms = nil;
if(self.eventAlert !=nil)
{
if(self.eventSecondAlert !=nil)
{
Alarms = [[[NSArray alloc] initWithObjects:self.eventAlert,self.eventSecondAlert, nil]autorelease];
}
else {
Alarms = [[[NSArray alloc] initWithObjects:self.eventAlert, nil]autorelease];
}
}
newEditingEvent.alarms = Alarms;
NSError *err;
[newEditingEvent setCalendar:self.eventCalendar];
[sharedEventStore saveEvent:newEditingEvent span:span commit:YES error:&err];
theDataObject.needUpdate = YES;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
[[NSNotificationCenter defaultCenter] postNotificationName:#"dismissEventDetails" object:nil];
}
else{
[self dismissViewControllerAnimated:YES completion:NULL];
}
}
The error report tells you everything you need to know:
[__NSArrayM relatedObjectDidChange]: unrecognized selector sent to instance
Which means that the NSArray class does not have a method called relatedObjectDidChange, so your code obviously calls this somewhere:
[someArray relatedObjectDidChange];
Without seeing your code, I cannot provide more help. I'd like to see this method:
[createNewEventView editEvent:]
and the definition of that class
The method relatedObjectDidChange is sent to an object of class NSArray which the class does not respond to. Did you mix up an NSMutableArray with an NSArray somewhere?
Or is relatedObjectDidChange a method that you did implement yourself on one of your objects? In that case you probably assigned an NSArray to a variable of which you expect to be of your very own class.
I get following crash when I open a URL consecutively for 3 to 4 times in my app inside a webView.
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: EXC_ARM_DA_ALIGN at 0x0062006f
Crashed Thread: 0
Thread 0 Crashed:
0 libSystem.B.dylib 0x0000576c OSAtomicCompareAndSwap32 + 0
1 libobjc.A.dylib 0x000066ce changeInfo(class_t*, unsigned int, unsigned int) + 22
2 libobjc.A.dylib 0x00008412 realizeClass(class_t*) + 38
3 libobjc.A.dylib 0x0000862c prepareForMethodLookup + 44
4 libobjc.A.dylib 0x0000538a lookUpMethod + 34
5 libobjc.A.dylib 0x00002b82 _class_lookupMethodAndLoadCache + 6
6 libobjc.A.dylib 0x000028b8 objc_msgSend_uncached + 20
7 UIKit 0x001d68c2 -[UIWebView webView:didFinishLoadForFrame:] + 214
8 UIKit 0x001d5e0c -[UIWebViewWebViewDelegate webView:didFinishLoadForFrame:] + 16
9 CoreFoundation 0x0009f06c __invoking___ + 60
10 CoreFoundation 0x00032706 -[NSInvocation invoke] + 102
11 WebCore 0x00044d42 SendMessage(NSInvocation*) + 10
12 WebCore 0x0005846e HandleDelegateSource(void*) + 62
13 CoreFoundation 0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6
14 CoreFoundation 0x00073768 __CFRunLoopDoSources0 + 376
15 CoreFoundation 0x00074504 __CFRunLoopRun + 224
16 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
17 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
18 GraphicsServices 0x000036e8 GSEventRunModal + 108
19 GraphicsServices 0x00003794 GSEventRun + 56
20 UIKit 0x000062a0 -[UIApplication _run] + 396
21 UIKit 0x00004e10 UIApplicationMain + 664
What could be wrong?
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(#"Button Clicked!");
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
orkutURLString = #"";
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:TRUE];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSURL *currentURL = orkutWebView.request.mainDocumentURL;
NSLog(#"Relative URL: %#",[currentURL relativePath]);
NSArray *urllistItems = [[currentURL relativePath] componentsSeparatedByString:#"/"];
if([urllistItems count]>1)
{
orkutURLString = [urllistItems objectAtIndex:1];
orkutURLString = [orkutURLString lowercaseString];
if([orkutURLString isEqualToString:#"share"])
{
orkutWebView = nil;
[orkutWebView removeFromSuperview];
[orkutView removeFromSuperview];
NSString *message1 = NSLocalizedStringFromTableInBundle( #"Your status update was sent", #"Localizable", [NewfoxRadioAppDelegate GetLocalizebundle], #"");
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:#"Newfox Radio" message:message1 delegate:self cancelButtonTitle:#"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
}
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:FALSE];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:FALSE];
}
Got the solution. Got an NSZombie wherein I was releasing the object and then trying to access it. Got the desired result after I made use of Instruments to find out the NSZombie.
I am using this code and it is giving exception
NSMutableArray *streams = (NSMutableArray *)[feed valueForKey:#"comments"];
NSMutableArray *streams1 = (NSMutableArray *)[streams valueForKey:#"data"];
//NSMutableArray *streams2 = (NSMutableArray *)[streams1 valueForKey:#"message"];
// loop over all the stream objects and print their titles
int index;
NSMutableDictionary *stream;
for (index = 0; index < [feed count];index++) {
stream = (NSMutableDictionary *)[streams1 objectAtIndex:index];
NSLog(#"Name of sender is: %#", [stream valueForKey:#"message"]);
}
FaceBookTable *detailViewController = [[FaceBookTable alloc] initWithNibName:#"FaceBookTable" bundle:nil];
// ...
// Pass the selected object to the new view controller.
detailViewController.fbGraph = fbGraph;
detailViewController.dummyArray = [ feed valueForKey:#"message"];
detailViewController.dict = stream;
}
Exception is
-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x5dae960
2011-06-15 16:14:07.835 MultiSocial[8042:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x5dae960'
while my other code is working fine
NSMutableArray *streams = (NSMutableArray *)[feed valueForKey:#"from"];
lueForKey:#"message"];
// loop over all the stream objects and print their titles
int index;
NSMutableDictionary *stream;
for (index = 0; index < [feed count];index++) {
stream = (NSMutableDictionary *)[streams objectAtIndex:index];
NSLog(#"Name of sender is: %#", [stream valueForKey:#"message"]);
}
Please help
here is crash log
2011-06-15 17:05:42.148 MultiSocial[8583:207] -[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x5d05f50
2011-06-15 17:05:42.156 MultiSocial[8583:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI isEqualToString:]: unrecognized selector sent to instance 0x5d05f50'
*** Call stack at first throw:
(
0 CoreFoundation 0x013cabe9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x0151f5c2 objc_exception_throw + 47
2 CoreFoundation 0x013cc6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x0133c366 ___forwarding___ + 966
4 CoreFoundation 0x0133bf22 _CF_forwarding_prep_0 + 50
5 UIKit 0x00649405 -[UITableViewLabel setText:] + 84
6 MultiSocial 0x00046147 -[FaceBookTable tableView:cellForRowAtIndexPath:] + 467
7 UIKit 0x0045f7fa -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634
8 UIKit 0x0045577f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
9 UIKit 0x0046a450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
10 UIKit 0x00462538 -[UITableView layoutSubviews] + 242
11 QuartzCore 0x01e98451 -[CALayer layoutSublayers] + 181
12 QuartzCore 0x01e9817c CALayerLayoutIfNeeded + 220
13 QuartzCore 0x01e9137c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
14 QuartzCore 0x01e910d0 _ZN2CA11Transaction6commitEv + 292
15 QuartzCore 0x01ec17d5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
16 CoreFoundation 0x013abfbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
17 CoreFoundation 0x013410e7 __CFRunLoopDoObservers + 295
18 CoreFoundation 0x01309bd7 __CFRunLoopRun + 1575
19 CoreFoundation 0x01309240 CFRunLoopRunSpecific + 208
20 CoreFoundation 0x01309161 CFRunLoopRunInMode + 97
21 GraphicsServices 0x0190f268 GSEventRunModal + 217
22 GraphicsServices 0x0190f32d GSEventRun + 115
23 UIKit 0x003fa42e UIApplicationMain + 1160
24 MultiSocial 0x00002740 main + 102
25 MultiSocial 0x000026d1 start + 53
)
Well as per the crash log -[__NSArrayI isEqualToString:] there is some mistake in your code. It is clearly visible in the crash report that isEqualToString method is for NSString object but in your code it is called on NSArray.
Just debug your app and you will find the solution.
UPDATE
//Make sure that feed return an array for the key comments
NSArray *streams = (NSArray *)[feed valueForKey:#"comments"];
NSArray *streams1 = (NSArray *)[streams valueForKey:#"data"];
NSLog(#"comments : %#",streams);
//When you are running loop only last index value will be copied into your dictionary named stream so remove the loop.
FaceBookTable *detailViewController = [[FaceBookTable alloc] initWithNibName:#"FaceBookTable" bundle:nil];
// ...
// Pass the selected object to the new view controller.
detailViewController.fbGraph = fbGraph;
detailViewController.dummyArray = [ feed valueForKey:#"message"];
detailViewController.dict = streams;
}
//Your tableView cellForRowAtIndexPath method should look like this
//First get the dictionary
if(dict){
NSDictionary *stream = (NSDictionary *)[dict objectAtIndex:indexPath.row];
if(stream){
NSDictionary * messages = (NSDictionary *[stream valueForKey:#"Message"];
NSString *comment = [messages valueForKey:#"comment"];
cell.textLabel.text = comment;
}
}
u have been assigning the NSString object to NSArray.so do debug with breakpoints
NSMutableArray *arr = [[[feed valueForKey:#"comments"]valueForKey:#"data" ]valueForKey:#"id"];
for (NSString* cid in [arr objectAtIndex:0]) {
NSLog(#"cid is : %# \n\n",cid);
}
Does anyone can tell me what is the source of this crash, because I have no idea what could be wrong. Here the crash log:
Incident Identifier: 517593EA-7CBC-4790-A924-966938AAA01B
CrashReporter Key: 179f2e12142cea96d45f2f6475c7f89a7a702d90
Hardware Model: iPhone1,2
Process: AppName [3579]
Path: /var/mobile/Applications/9FBBBD37-2A31-4240-A8AC-64E5BD0B00C0/AppName.app/AppName
Identifier: AppName
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-04-04 15:51:32.466 +0200
OS Version: iPhone OS 4.2.1 (8C148)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000004
Crashed Thread: 9
Thread 0:
0 libSystem.B.dylib 0x35d5b3b0 mach_msg_trap + 20
1 libSystem.B.dylib 0x35d5d894 mach_msg + 60
2 CoreFoundation 0x37521f7c __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x37521780 __CFRunLoopRun + 400
4 CoreFoundation 0x37521504 CFRunLoopRunSpecific + 220
5 CoreFoundation 0x37521412 CFRunLoopRunInMode + 54
6 GraphicsServices 0x33e76d1c GSEventRunModal + 188
7 UIKit 0x3591d574 -[UIApplication _run] + 580
8 UIKit 0x3591a550 UIApplicationMain + 964
9 AppName 0x00002c9a main (main.m:13)
10 AppName 0x00002c64 start + 32
Thread 1:
0 libSystem.B.dylib 0x35d8f974 kevent + 24
1 libSystem.B.dylib 0x35e5e2fc _dispatch_mgr_invoke + 88
2 libSystem.B.dylib 0x35e5dd68 _dispatch_queue_invoke + 96
3 libSystem.B.dylib 0x35e5d788 _dispatch_worker_thread2 + 120
4 libSystem.B.dylib 0x35de6970 _pthread_wqthread + 392
5 libSystem.B.dylib 0x35ddd2fc start_wqthread + 0
Thread 2:
0 libSystem.B.dylib 0x35d5b3b0 mach_msg_trap + 20
1 libSystem.B.dylib 0x35d5d894 mach_msg + 60
2 CoreFoundation 0x37521f7c __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x37521780 __CFRunLoopRun + 400
4 CoreFoundation 0x37521504 CFRunLoopRunSpecific + 220
5 CoreFoundation 0x37521412 CFRunLoopRunInMode + 54
6 WebCore 0x3318bd14 RunWebThread(void*) + 524
7 libSystem.B.dylib 0x35de5b44 _pthread_start + 364
8 libSystem.B.dylib 0x35dd77a4 thread_start + 0
Thread 3:
0 libSystem.B.dylib 0x35de454c __semwait_signal + 24
1 libSystem.B.dylib 0x35d5d198 nanosleep + 120
2 Foundation 0x351e066a +[NSThread sleepForTimeInterval:] + 98
3 AppName 0x00005b40 -[Syncer requestPump] (Syncer.m:116)
4 Foundation 0x3515cb8a -[NSThread main] + 42
5 Foundation 0x35155b90 __NSThread__main__ + 908
6 libSystem.B.dylib 0x35de5b44 _pthread_start + 364
7 libSystem.B.dylib 0x35dd77a4 thread_start + 0
Thread 4:
0 libSystem.B.dylib 0x35d5b3b0 mach_msg_trap + 20
1 libSystem.B.dylib 0x35d5d894 mach_msg + 60
2 CoreFoundation 0x37521f7c __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x37521780 __CFRunLoopRun + 400
4 CoreFoundation 0x37521504 CFRunLoopRunSpecific + 220
5 CoreFoundation 0x37521412 CFRunLoopRunInMode + 54
6 Foundation 0x3517ec4e +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 210
7 Foundation 0x3515cb8a -[NSThread main] + 42
8 Foundation 0x35155b90 __NSThread__main__ + 908
9 libSystem.B.dylib 0x35de5b44 _pthread_start + 364
10 libSystem.B.dylib 0x35dd77a4 thread_start + 0
Thread 5:
0 libSystem.B.dylib 0x35d848d8 select$DARWIN_EXTSN + 20
1 CoreFoundation 0x3755aa34 __CFSocketManager + 356
2 libSystem.B.dylib 0x35de5b44 _pthread_start + 364
3 libSystem.B.dylib 0x35dd77a4 thread_start + 0
Thread 6:
0 libSystem.B.dylib 0x35de72fc __workq_kernreturn + 8
1 libSystem.B.dylib 0x35de6b50 _pthread_wqthread + 872
2 libSystem.B.dylib 0x35ddd2fc start_wqthread + 0
Thread 7:
0 libSystem.B.dylib 0x35de72fc __workq_kernreturn + 8
1 libSystem.B.dylib 0x35de6b50 _pthread_wqthread + 872
2 libSystem.B.dylib 0x35ddd2fc start_wqthread + 0
Thread 8:
0 libSystem.B.dylib 0x35de72fc __workq_kernreturn + 8
1 libSystem.B.dylib 0x35de6b50 _pthread_wqthread + 872
2 libSystem.B.dylib 0x35ddd2fc start_wqthread + 0
Thread 9 Crashed:
0 CoreFoundation 0x374fec60 __CFBasicHashAddValue + 140
1 CoreFoundation 0x374ff8fc CFBasicHashAddValue + 276
2 CoreFoundation 0x3750410a CFSetAddValue + 90
3 CoreFoundation 0x3752be2a -[__NSCFSet addObject:] + 34
4 CoreData 0x34998002 -[NSManagedObjectContext(_NSInternalAdditions) _insertObjectWithGlobalID:globalID:] + 134
5 CoreData 0x34997ec6 -[NSManagedObjectContext insertObject:] + 58
6 CoreData 0x34979cbc -[NSManagedObject initWithEntity:insertIntoManagedObjectContext:] + 248
7 AppName 0x00066512 -[SNServerChanges newItemWithJSONStringFor:withList:] (SNServerChanges.m:655)
8 AppName 0x0006847a -[SNServerChanges requestDidFinishThread:] (SNServerChanges.m:282)
9 AppName 0x00065b28 -[SNServerChanges makeChanges:] (SNServerChanges.m:41)
10 Foundation 0x3515cb8a -[NSThread main] + 42
11 Foundation 0x35155b90 __NSThread__main__ + 908
12 libSystem.B.dylib 0x35de5b44 _pthread_start + 364
13 libSystem.B.dylib 0x35dd77a4 thread_start + 0
Thread 9 crashed with ARM Thread State:
r0: 0x0405ceb0 r1: 0x00000000 r2: 0x00000004 r3: 0x00000001
r4: 0x0405ceb0 r5: 0x002e1c20 r6: 0x00000004 r7: 0x04468884
r8: 0x00000001 r9: 0x044688ac r10: 0x0405ceb0 r11: 0x002bf670
ip: 0x00000000 sp: 0x04468870 lr: 0x34982145 pc: 0x374fec60
cpsr: 0x20000010
One thing I know is the fact that there is something wrong when I try to add new object to Core Data.
This is how I set up Core Data:
- (id) init {
if (self = [super init]) {
NSString* path = [[NSBundle mainBundle] pathForResource:#"Main210" ofType:#"mom"];
NSURL* url = [NSURL fileURLWithPath:path];
url = [[NSURL alloc] initFileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: #"data.bin"]];
NSError *error = nil;
sqlite3_enable_shared_cache(0); // from apple Bug ID# 8055992
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error])
{
NSLog(#"Error: %# \n\n userInfo: %# \n\n ", error, [error userInfo]);
NSError *underlyingError = [[error userInfo] objectForKey:NSUnderlyingErrorKey];
if (underlyingError) {
NSLog(#"Underlying error: %# \n\n userInfo: %# \n\n", underlyingError, [underlyingError userInfo]);
}
NSArray *detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
for (NSError *detailError in detailedErrors) {
NSLog(#"Detailed error: %# \n\n userInfo: %# \n\n", detailError, [detailError userInfo]);
}
abort();
}
if (persistentStoreCoordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: persistentStoreCoordinator];
NSUndoManager *undoManager = [[NSUndoManager alloc] init];
[managedObjectContext setUndoManager:undoManager];
[managedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
}
}
return self;
}
And the function which causes crash:
-(void) newItemWithJSONStringFor:(NSArray*) itemsArray withList:(Lista*) lista {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSNumber *databaseID;
if(LOG==1)NSLog(#"Lista : %#, itemsArrayCount: %d",[lista name], [itemsArray count]);
for (int i=0; i<itemsArray.count; i++) {
[NSThread sleepForTimeInterval:EACHITEMWAITTIME];
NSDictionary* jsonItem = [itemsArray objectAtIndex:i];
databaseID = [jsonItem valueForKey:#"Id"];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:#"Item" inManagedObjectContext:[CoreDataHandler syncContext]];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:#"databaseID == %qi", [databaseID longLongValue]];
[request setPredicate:predicate];
NSError* error;
NSMutableArray *mutableFetchResults = [[[CoreDataHandler syncContext] executeFetchRequest:request error:&error] mutableCopy];
[request release];
BOOL flag = YES; //will item be created?
if (! (mutableFetchResults && [mutableFetchResults count] == 0) ) {
flag = NO;
}
Item* item = [mutableFetchResults lastObject];
if (!item) {
NSEntityDescription *entity = [NSEntityDescription entityForName:#"Item" inManagedObjectContext:[CoreDataHandler syncContext]];
item = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:[CoreDataHandler syncContext]];
item.databaseID = databaseID;
item.databaseIDSet = [NSNumber numberWithBool:YES];
item.lista = lista;
[mutableFetchResults addObject:item];
}
else {
if(LOG==1)NSLog(#"SNServerChanges - newItemWithJSONString - Modyfing");
}
if(LOG==1)NSLog(#"SNServerChanges - newItemWithJSONString - FillingItem");
// if(LOG==1)NSLog(#"SNServerChanges - newItemWithJSONString - Making new");
//Nazwa
if ([jsonItem valueForKey:#"N"] != [NSNull null])
item.name = [jsonItem valueForKey:#"N"];
//Opis
if ([jsonItem valueForKey:#"D"] != [NSNull null])
item.desc = [jsonItem valueForKey:#"D"];
//Ilosc
if ([jsonItem valueForKey:#"Q"] != [NSNull null])
item.quantity = [jsonItem valueForKey:#"Q"];
//Jednostka
if ([jsonItem valueForKey:#"U"] != [NSNull null])
item.unit = [jsonItem valueForKey:#"U"];
//Checked
if ([jsonItem valueForKey:#"C"] != [NSNull null]){
NSLog(#"SC New : %#, %d",[item fullName], [[item checked] boolValue]);
if(![item.checkedChanged boolValue]){
item.checked = [NSNumber numberWithBool:[[jsonItem valueForKey:#"C"] boolValue]];
}
else
[SyncManager doNextSync];
}
//Pozycja
if ([jsonItem valueForKey:#"O"] != [NSNull null])
item.position = [NSNumber numberWithInt: [[jsonItem valueForKey:#"O"] intValue]];
//Reklama
if([jsonItem valueForKey:#"Adv"]!= nil && [jsonItem valueForKey:#"Adv"]!=[NSNull null]) {
NSDictionary* temp = [jsonItem valueForKey:#"Adv"];
NSString* tempString = [NSString stringWithFormat:#"%#",[temp valueForKey:#"T"]];
item.advert = tempString;
}
//Cena
if ( [jsonItem valueForKey:#"P"] != nil && [jsonItem valueForKey:#"P"]!=[NSNull null])
{
NSObject* obj = [jsonItem valueForKey:#"P"];
item.price=[NSNumber numberWithDouble:[[jsonItem valueForKey:#"P"] doubleValue]];
}
if ([jsonItem valueForKey:#"Pe"] != [NSNull null])
item.priceEstimated = [NSNumber numberWithBool:[[jsonItem valueForKey:#"Pe"] boolValue]];
if ([jsonItem valueForKey:#"Ci"] != [NSNull null])
item.categoryID = [NSNumber numberWithInt: [[jsonItem valueForKey:#"Ci"] intValue]];
if (flag) {
if ( [item.checked boolValue] )
lista.checked = [NSNumber numberWithInt:[lista.checked intValue]+1];
lista.count = [NSNumber numberWithInt:[lista.count intValue]+1];
}
// if(LOG==1)NSLog(#"SNServerChanges - newItemWithJSONString - Fetching");
if(LOG==1)NSLog(#"SNServerChanges - newItemWithJSONString - AddingToItemCache");
if(LOG==1)NSLog(#"\tItem : %#", [item name]);
//[ItemCache processItem: item];
// [(SNServerChanges*)[SNServerChanges sharedInstance] performSelectorOnMainThread:#selector(saveCoreData) withObject:nil waitUntilDone:YES];
if(LOG==1)NSLog(#"SNServerChanges - newItemWithJSONString - ItemAdded");
}
[pool drain];
}
The app is presumably crashing on this line:
item = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:[CoreDataHandler syncContext]];
You have item defined previously as of class Item but now you are assigning a generic NSManagedObject to it. That is probably the cause of the crash.
I can't see where you've gone wrong (unless there's no Item entity in your model - why not NSLog(#"%#",item);?). I've always used a different call to add a new object, instead of the explicit allocation of an NSManagedObject:
[NSEntityDescription insertNewObjectForEntityForName:#"Item"
inManagedObjectContext:managedObjectContext];
Not sure if it matters.
My app crashes, it is a problem that arises from the AddressBook API, it only happens with some contacts.
Here is the log:
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000102, 0x316ebd38
Crashed Thread: 0
Thread 0 Crashed:
0 CoreFoundation 0x00001cfe CFRetain + 90
1 AddressBook 0x00004b2c ABCMultiValueCopyValueAtIndex + 28
2 AddressBook 0x0001066a ABMultiValueCopyValueAtIndex + 2
3 Call Monitor 0x00003824 -[CallAppDelegate peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:] (AppDelegate.m:408)
4 AddressBookUI 0x00032cfc -[ABPeoplePickerNavigationController personViewController:shouldPerformDefaultActionForPerson:property:identifier:withMemberCell:] + 152
5 AddressBookUI 0x0003b8ce -[ABPersonViewControllerHelper personTableViewDataSource:selectedPropertyAtIndex:inPropertyGroup:withMemberCell:forEditing:] + 222
6 AddressBookUI 0x0004a17c -[ABPersonTableViewDataSource valueAtIndex:selectedForPropertyGroup:withMemberCell:forEditing:] + 40
7 AddressBookUI 0x00048c00 -[ABPersonTableViewDataSource tableView:didSelectRowAtIndexPath:] + 316
8 UIKit 0x00091f40 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 656
9 UIKit 0x0009db40 -[UITableView _userSelectRowAtIndexPath:] + 124
10 Foundation 0x00086c86 __NSFireDelayedPerform + 362
11 CoreFoundation 0x00071a54 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
12 CoreFoundation 0x00073ede __CFRunLoopDoTimer + 854
13 CoreFoundation 0x0007485e __CFRunLoopRun + 1082
14 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
15 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
16 GraphicsServices 0x000036e8 GSEventRunModal + 108
17 GraphicsServices 0x00003794 GSEventRun + 56
18 UIKit 0x000062a0 -[UIApplication _run] + 396
19 UIKit 0x00004e10 UIApplicationMain + 664
20 Call Monitor 0x000028e8 main (main.m:14)
21 Call Monitor 0x000028b8 start + 32
This is driving me crazy, as it only happens with an isolated number of contacts.
Any help would be greatly appreciated.
Here is the code that was requested, thank you very very much for your help:
(It is an extract from the method where I think the error happens)
The weird thing is that it only happens with certain contacts, and deleting the contact, then creating a new one solves the problem...
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
NSString* firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString* lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
NSNumber* record = [NSNumber numberWithInt:ABRecordGetRecordID(person)];
if(lastName!=nil){
name=[NSString stringWithFormat:#"%# %#",firstName,lastName];
}
else {
name=firstName;
}
ABMultiValueRef phone = ABRecordCopyValue(person, property);
NSString *value =(NSString *)ABMultiValueCopyValueAtIndex(phone, identifier);
NSString *label =(NSString *)ABMultiValueCopyLabelAtIndex(phone, identifier);
NSMutableArray *tempArray=[[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:#"MainArray"]];
NSDictionary *stringDictionary = [NSDictionary dictionaryWithObjectsAndKeys:name, kLabelKey, value, kNumberKey,label, kNumberLabelKey,record, kReferenceKey, nil];
[tempArray addObject:stringDictionary];
NSArray *mainArray = [NSArray arrayWithArray:tempArray];
[[NSUserDefaults standardUserDefaults] setObject:mainArray forKey:#"MainArray"];
To anyone experiencing a similar problem:
My error came from the fact that I was using:
ABMultiValueCopyValueAtIndex with an identifier instead of an index.
You have to call ABMultiValueGetIndexForIdentifier and then use that index on the ABMultiValueCopyValueAtIndex.
The bottom line is Identifier!=index.
Instead of using
ABMultiValueCopyValueAtIndex(multiValue, identifier);
Which Zebs pointed out above, use...
ABMultiValueCopyValueAtIndex(multiValue, ABMultiValueGetIndexForIdentifier(multiValue, identifier));
I would make sure you're really dealing with valid multi value record type.
if (ABMultiValueGetPropertyType(phone) != kABInvalidPropertyType) {
// Do work here.
}
Actually, it would probably be safer to make sure it's really a string.
if (ABMultiValueGetPropertyType(phone) == kABMultiStringPropertyType) {
// Do work here.
}
I don't know why this wouldn't be the case. Maybe you have corrupted contacts entries? Or maybe sometimes the phone number isn't a multi value type?