Why would app try to save to PLSharedManagedObjectContext?

▼魔方 西西 提交于 2019-12-13 05:29:18

问题


The following is a crash report I received from my crash reporting service, HockeyApp. The reason for the failure is a failure to save in PLSharedManagedObjectContext. I (think) I am doing all of my saves in the main app delegate managedObjectContext. Why is the PLSharedManagedObjectContext the one being saved to?

I think this is the relevant code:

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    __ENTERING_METHOD__
    DLog(@"info:%@",info);
    NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    __block UIImage *originalImage =  [info objectForKey:UIImagePickerControllerOriginalImage];

    CGSize cropSize = CGSizeMake(320,320);
    CGFloat previewWindowHeight = 100.0f;

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    __block UIImage *previewImage;


    if (originalImage) {
        DLog(@"WE DO HAVE AN ORIGINAL IMAGE");
    }
    else {
        DLog(@"WE DO NOT HAVE AN ORIGINAL IMAGE");
    }

    ImageEditor *imageEditor = [[ImageEditor alloc] initWithNibName:nil bundle:nil];
    [imageEditor setRotateEnabled:NO];
    [imageEditor setCheckBounds:NO];

    [imageEditor setSourceImage:originalImage];
    [imageEditor setPreviewHeight1:[NSNumber numberWithDouble:previewWindowHeight]];
    [imageEditor setCropSize:cropSize];

    imageEditor.doneCallback = ^(UIImage *editedImage, UIImage *originalImageMax1024, BOOL canceled){

        picker.delegate = nil;

        if(!canceled) {

            if (editedImage) {

                UIImage *scaledThumbnail = [HFImageEditorViewController getThumbnailForImage:editedImage size:CGSizeMake(PERSON_THUMBNAIL_SIZE,PERSON_THUMBNAIL_SIZE) round:PERSON_THUMBNAIL_ROUND];
                [self setObjectCroppedImage:editedImage thumbnail:scaledThumbnail updateHeaderView:YES mocSave:NO];

                [self setObjectMainImage:originalImageMax1024 mocSave:NO];


                [Helper mocSave];

                self.imageToShow = originalImage;
            }
        }
        [Helper controller:self dismissControllerModal:YES];
    };

    [library assetForURL:assetURL resultBlock:^(ALAsset *asset) {

        if (!originalImage) {
            originalImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
        }
        [imageEditor setSourceImage:originalImage];

        previewImage = [UIImage imageWithCGImage:[asset aspectRatioThumbnail]];
        [imageEditor setPreviewImage:previewImage];

        [imageEditor reset:NO];

        //DLog(@"originalImage.imageOrientation:%d",originalImage.imageOrientation);

        [picker pushViewController:imageEditor animated:YES];

    } failureBlock:^(NSError *error) {
        DLog(@"Failed to get asset from library");

        if (originalImage) {
            [imageEditor setSourceImage:originalImage];
            [imageEditor setPreviewImage:nil];
            [imageEditor reset:NO];
            [picker pushViewController:imageEditor animated:YES];
        }
        else {
            [Helper showSimpleAlertWithTitle:NSLocalizedString(@"Image Could Not Be Set", @"Image Could Not Be Set") message:NSLocalizedString(@"Failed to retrieve selected image asset from the Library.", @"Failed to retrieve selected image asset from the Library.")];
            [Helper controller:self dismissControllerModal:YES];
        }
    }];
}

This is the crash log I am receiving:

 Incident Identifier: 4DD4FE03-B8D4-4625-9039-64E4EE725AAB
    CrashReporter Key:   129951E7-CF2A-4BB0-A8AB-7BA954275E29
    Hardware Model:      iPhone5,2
    Process:         MyApp [144]
    Path:            /Users/USER/MyApp.app/MyApp
    Identifier:      com.myCom.myApp
    Version:         1.5.1
    Code Type:       ARM
    Parent Process:  launchd [1]

    Date/Time:       2013-11-23 12:15:43 +0000
    OS Version:      iPhone OS 7.0.4 (11B554a)
    Report Version:  104

    Exception Type:  SIGABRT
    Exception Codes: #0 at 0x3a9031fc
    Crashed Thread:  0

    Application Specific Information:
    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to save context <PLSharedManagedObjectContext: 0x157b6110>: Error Domain=NSCocoaErrorDomain Code=134030 "The operation couldn’t be completed. (Cocoa error 134030.)" (null)'

    Last Exception Backtrace:
    0   CoreFoundation                       0x2fff6e83 __exceptionPreprocess + 131
    1   libobjc.A.dylib                      0x3a3536c7 objc_exception_throw + 38
    2   PhotoLibraryServices                 0x3667441d __copy_helper_block_279 + 1
    3   CoreData                             0x2fdd1855 developerSubmittedBlockToNSManagedObjectContextPerform + 89
    4   libdispatch.dylib                    0x3a8380af _dispatch_client_callout + 23
    5   libdispatch.dylib                    0x3a83a9a9 _dispatch_main_queue_callback_4CF + 268
    6   CoreFoundation                       0x2ffc15b1 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
    7   CoreFoundation                       0x2ffbfe7d __CFRunLoopRun + 1309
    8   CoreFoundation                       0x2ff2a471 CFRunLoopRunSpecific + 524
    9   CoreFoundation                       0x2ff2a253 CFRunLoopRunInMode + 106
    10  GraphicsServices                     0x34c642eb GSEventRunModal + 138
    11  UIKit                                0x327df845 UIApplicationMain + 1136
    12  MyApp                          0x0005b10b main (main.m:5)
    13  libdyld.dylib                        0x3a84cab7 start + 3

    Thread 0 Crashed:
    0   libsystem_kernel.dylib               0x3a9031fc __pthread_kill + 8
    1   libsystem_c.dylib                    0x3a8b402d abort + 76
    2   MyApp                          0x002235c7 uncaught_exception_handler + 27
    3   CoreFoundation                       0x2fff7185 __handleUncaughtException + 581
    4   libobjc.A.dylib                      0x3a353927 _objc_terminate() + 175
    5   libc++abi.dylib                      0x39d191b3 std::__terminate(void (*)()) + 79
    6   libc++abi.dylib                      0x39d18a09 __cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*) + 1
    7   libobjc.A.dylib                      0x3a35379b objc_exception_throw + 250
    8   PhotoLibraryServices                 0x3667441d __copy_helper_block_279 + 1
    9   CoreData                             0x2fdd1855 developerSubmittedBlockToNSManagedObjectContextPerform + 89
    10  libdispatch.dylib                    0x3a8380af _dispatch_client_callout + 23
    11  libdispatch.dylib                    0x3a83a9a9 _dispatch_main_queue_callback_4CF + 268
    12  CoreFoundation                       0x2ffc15b1 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
    13  CoreFoundation                       0x2ffbfe7d __CFRunLoopRun + 1309
    14  CoreFoundation                       0x2ff2a471 CFRunLoopRunSpecific + 524
    15  CoreFoundation                       0x2ff2a253 CFRunLoopRunInMode + 106
    16  GraphicsServices                     0x34c642eb GSEventRunModal + 138
    17  UIKit                                0x327df845 UIApplicationMain + 1136
    18  MyApp                          0x0005b10b main (main.m:5)
    19  libdyld.dylib                        0x3a84cab7 start + 3

    Thread 1:
    0   libsystem_kernel.dylib               0x3a8f0838 kevent64 + 24
    1   libdispatch.dylib                    0x3a839623 _dispatch_mgr_thread + 39

    Thread 2:
    0   libsystem_kernel.dylib               0x3a8f0a84 mach_msg_trap + 20
    1   CoreFoundation                       0x2ffc1559 __CFRunLoopServiceMachPort + 157
    2   CoreFoundation                       0x2ffbfc79 __CFRunLoopRun + 793
    3   CoreFoundation                       0x2ff2a471 CFRunLoopRunSpecific + 524
    4   CoreFoundation                       0x2ff6e0db CFRunLoopRun + 98
    5   CoreMotion                           0x305e2369 CLSF_thorntonUpdate_6x6 + 57225
    6   libsystem_pthread.dylib              0x3a969c5d _pthread_body + 141
    7   libsystem_pthread.dylib              0x3a969bcf _pthread_start + 102
    8   libsystem_pthread.dylib              0x3a967cd0 thread_start + 8

    Thread 3:
    0   libsystem_kernel.dylib               0x3a903c7c __workq_kernreturn + 8
    1   libsystem_pthread.dylib              0x3a967cc4 start_wqthread + 8

    Thread 4:
    0   libsystem_kernel.dylib               0x3a903c7c __workq_kernreturn + 8
    1   libsystem_pthread.dylib              0x3a967cc4 start_wqthread + 8

    Thread 5:
    0   libsystem_kernel.dylib               0x3a8f0a84 mach_msg_trap + 20
    1   CoreFoundation                       0x2ffc1559 __CFRunLoopServiceMachPort + 157
    2   CoreFoundation                       0x2ffbfc79 __CFRunLoopRun + 793
    3   CoreFoundation                       0x2ff2a471 CFRunLoopRunSpecific + 524
    4   CoreFoundation                       0x2ff2a253 CFRunLoopRunInMode + 106
    5   Foundation                           0x309654c1 +[NSURLConnection _resourceLoadLoop:] + 320
    6   Foundation                           0x309dac37 __NSThread__main__ + 1063
    7   libsystem_pthread.dylib              0x3a969c5d _pthread_body + 141
    8   libsystem_pthread.dylib              0x3a969bcf _pthread_start + 102
    9   libsystem_pthread.dylib              0x3a967cd0 thread_start + 8

    Thread 6:
    0   libsystem_kernel.dylib               0x3a903440 __select + 20
    1   libsystem_pthread.dylib              0x3a969c5d _pthread_body + 141
    2   libsystem_pthread.dylib              0x3a969bcf _pthread_start + 102
    3   libsystem_pthread.dylib              0x3a967cd0 thread_start + 8

    Thread 7:
    0   libsystem_kernel.dylib               0x3a903c7c __workq_kernreturn + 8
    1   libsystem_pthread.dylib              0x3a967cc4 start_wqthread + 8

    Thread 8:
    0   libsystem_kernel.dylib               0x3a8f0ad4 semaphore_wait_trap + 8
    1   MediaToolbox                         0x31419a0f fpa_AsyncMovieControlThread + 1755
    2   CoreMedia                            0x30556217 figThreadMain + 195
    3   libsystem_pthread.dylib              0x3a969c5d _pthread_body + 141
    4   libsystem_pthread.dylib              0x3a969bcf _pthread_start + 102
    5   libsystem_pthread.dylib              0x3a967cd0 thread_start + 8

    Thread 9:
    0   libsystem_kernel.dylib               0x3a903c7c __workq_kernreturn + 8
    1   libsystem_pthread.dylib              0x3a967cc4 start_wqthread + 8

    Thread 0 crashed with ARM Thread State:
        pc: 0x3a9031fc     r7: 0x27dae3a4     sp: 0x27dae398     r0: 0x00000000 
        r1: 0x00000000     r2: 0x00000000     r3: 0xffffffff     r4: 0x00000006 
        r5: 0x3c73018c     r6: 0x15734ff0     r8: 0x32d7cdb2     r9: 0x3c730e30 
       r10: 0x32d62122    r11: 0x0000000e     ip: 0x00000148     lr: 0x3a96aa53 
      cpsr: 0x00000010 

EDIT: I think this code in ImageEditor may have something to do with it:

- (IBAction)doneAction:(id)sender
{
    __ENTERING_METHOD__
    self.view.userInteractionEnabled = NO;
    [self startTransformHook];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        CGImageRef resultRef = [HFImageEditorViewController newTransformedImage:self.imageView.transform sourceImage:self.sourceImage.CGImage sourceSize:self.sourceImage.size sourceOrientation:self.sourceImage.imageOrientation outputWidth:self.outputWidth ? self.outputWidth : self.sourceImage.size.width cropSize:self.cropSize imageViewSize:self.imageView.bounds.size];
        dispatch_async(dispatch_get_main_queue(), ^{

            UIImage *transform =  [UIImage imageWithCGImage:resultRef scale:1.0 orientation:UIImageOrientationUp];
            CGImageRelease(resultRef);

            UIImage *scaledThumbnail = [HFImageEditorViewController getThumbnailForImage:transform size:_thumbnailSize round:_thumbnailRound];

            self.view.userInteractionEnabled = YES;

            if(self.doneCallback) {
                self.doneCallback(transform, _sourceImage, NO);
            }
            [self endTransformHook];
        });
    });
}

+ (UIImage*)getThumbnailForImage:(UIImage*)mySourceImage size:(CGSize)size round:(BOOL)round {

    //TODO THIS SHOULD BE MOVED TO THE BACKGROUND
    UIImage *scaledImage = [HFImageEditorViewController scaledImage:mySourceImage toSize:size withQuality:kCGInterpolationHigh];
    if (round) {
        CALayer *imageLayer = [CALayer layer];
        imageLayer.frame = CGRectMake(0, 0, scaledImage.size.width, scaledImage.size.height);
        imageLayer.contents = (id) scaledImage.CGImage;

        imageLayer.masksToBounds = YES;
        imageLayer.cornerRadius = scaledImage.size.width/2;

        UIGraphicsBeginImageContext(scaledImage.size);
        [imageLayer renderInContext:UIGraphicsGetCurrentContext()];
        scaledImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    return scaledImage;
}

回答1:


PLSharedManagedObjectContext appears to be an undocumented class that's part of PhotoLibraryServices.framework. That framework is itself undocumented, but the fact that it shows up in your backtrace implicates it.

As a result I don't think that this exception has anything really to do with your Core Data code. PhotoLibraryServices is using Core Data internally somewhere, and failing to do so. This might mean that you're doing something wrong with your photo handling, or it might be a framework bug. Either way, looking at your own Core Data code will almost certainly miss the point.

Having said that, there's also an indication that a performBlock call might have been involved somehow. Depending on what your mocSave method does, there might be a connection.



来源:https://stackoverflow.com/questions/20270714/why-would-app-try-to-save-to-plsharedmanagedobjectcontext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!