2012-11-15 55 views
1

我正在编写一个多线程应用程序,它需要在后台集中上传来自ALAssetsLibrary的照片。所以我有一个NSOperation子类,它通过资产的URL找到适当的ALAsset并将图像添加到上传队列中。ALAssetRepresentation fullResolutionImage永不返回

在当前ALAsset的上传队列中,我需要从图像中获取元数据,但遇到了一个问题:-metadata和-fullResolutionImage方法在ALAssetRepresentation ALAsset。他们只是无限期地呆在那里。我尝试在LLDB中打印这些方法中的每一个的值,但它将调试器挂起来,最后我终于杀死了Xcode,signal 9风格。这些方法在后台队列上被调用。

我在iPad 2.测试这些这是在其中当在-assetForURL的成功块被发现ALAsset被添加到上传队列的方法:resultBlock:failureBlock:

- (void)addMediaToUploadQueue:(ALAsset *)media { 
    @autoreleasepool { 
     ALAssetRepresentation *defaultRepresentation = [media defaultRepresentation]; 
     CGImageRef fullResolutionImage = [defaultRepresentation fullResolutionImage]; 

     // Return if the user is trying to upload an image which has already been uploaded 
     CGFloat scale = [defaultRepresentation scale]; 
     UIImageOrientation orientation = [defaultRepresentation orientation]; 

     UIImage *i = [UIImage imageWithCGImage:fullResolutionImage scale:scale orientation:orientation]; 
     if (![self isImageUnique:i]) return; 

     NSDictionary *imageDictionary = [self dictionaryForAsset:media withImage:i]; 

     dispatch_async(self.background_queue, ^{ 
      NSManagedObjectContext *ctx = [APPDELEGATE createManagedObjectContextForThread]; 
      [ctx setUndoManager:nil]; 

      [ctx performBlock:^{ 
       ImageEntity *newImage = [NSEntityDescription insertNewObjectForEntityForName:@"ImageEntity" 
                    inManagedObjectContext:ctx]; 

       [newImage updateWithDictionary:imageDictionary 
         inManagedObjectContext:ctx]; 

       [ctx save:nil]; 

       [APPDELEGATE saveContext]; 

       dispatch_async(dispatch_get_main_queue(), ^{ 
        [self.fetchedResultsController performFetch:nil]; 
       }); 

        if (!currentlyUploading) { 
         currentlyUploading = YES; 
         [self uploadImage:newImage]; 
        } 
      }]; 
     }); 
    } 
} 

回答

6

我有类似的问题,我正在试图弄清楚自己的头发。

原来在我以为自己设置了ALAssetsLibrary单身,我的代码是不正确调用它和一些ALAssets正在返回一个空的“fullResolutionImage”

在我所有的NSLogs我必须错过了最重要的在Xcode消息:

“无效试图访问ALAssetPrivate过去它拥有ALAssetsLibrary的一生”

请点击此链接

http://www.daveoncode.com/2011/10/15/solve-xcode-error-invalid-attempt-to-access-alassetprivate-past-the-lifetime-of-its-owning-alassetslibrary/

我希望能帮到