【发布时间】:2012-08-02 17:37:25
【问题描述】:
仅当在此应用程序运行中创建条目时才会发生这种情况。如果之前创建了条目,它会很好地获取图像。
这段代码在不使用后台线程的情况下运行良好,所以它让我相信它是问题的一部分。这是我的代码:
NSMutableDictionary *thumbnails = [[NSMutableDictionary alloc] init];
dispatch_queue_t thumbnailSetupQueue = dispatch_queue_create("com.App.SetupTimelineThumbnails", NULL);
dispatch_async(cellSetupQueue, ^{
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [NSManagedObjectContext contextForCurrentThread].persistentStoreCoordinator;
[newMoc setPersistentStoreCoordinator:coordinator];
NSNotificationCenter *notify = [NSNotificationCenter defaultCenter];
[notify addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:newMoc];
Media *media = [localEntry.media anyObject];
UIImage *image = [media getThumbnail];
NSLog(@"image: %@", image);
[[NSNotificationCenter defaultCenter] removeObserver:self];
});
dispatch_release(cellSetupQueue);
然后
-(UIImage *)getThumbnail {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithFormat:@"%@-%@.jpg",
self.mediaID,
THUMBNAIL_FILENAME]];
UIImage *thumbnail = [UIImage imageWithContentsOfFile:fullPath];
NSLog(@"correct size thumbnail: %@", correctSizeThumbnail);
return correctSizeThumbnail;
}
getThumbnailWithSave 中的 NSLog 返回 UIImage,其他 NSLog 返回 nil。
【问题讨论】:
-
get不应用作此类方法的前缀...... -
您的问题包含太多代码。如果您将问题缩减到重要的领域,我们将更容易找出问题所在。如果我不得不猜测,我会说这是因为当后台线程尝试访问它时,图像尚未创建或已被释放。
-
@Dustin 我现在已经减少了一点。如果这可能是问题,我如何阻止图像被释放?没有创建是什么意思?我向您展示了上面创建的所有元素。
-
您正在使用
async操作,因此您必须确保每当后台线程需要某些东西时,它已经被创建或未被删除。老实说,对我来说仍然有太多代码无法完成,但请尝试增加后台线程所需的变量范围。 -
现在更短了。扩大范围是什么意思?
标签: objective-c ios cocoa-touch core-data magicalrecord