- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有以下代码:
dispatch_async(dispatch_get_main_queue(), ^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
Item *newItem = [Item createInContext:localContext];
newItem.title = NULL_TO_NIL([itemJson valueForKey:@"title"]);
newItem.image_url = NULL_TO_NIL([itemJson valueForKey:@"image_url"]);
newItem.order_id = @([[self largestOrderId] intValue] + 1);
NSURL *url = [NSURL URLWithString:newItem.image_url];
NSData *data = [[NSData alloc] initWithContentsOfURL: url];
if (data == nil) {
NSLog(@"Image data is nil from %@", url);
} else {
NSLog(@"Image fetched in saveItemFromJson for cid:%@ order_id:%@", newItem.cid, newItem.order_id);
newItem.image = [UIImage imageWithData:data];
}
if (![localContext hasChanges]) {
NSLog(@"No local change detected. Quitting");
return;
}
[localContext saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
if (!success)
NSLog(@"Error: %@", [error localizedDescription]);
else
NSLog(@"Item persisted for cid:%@ order_id:%@", newItem.cid, newItem.order_id);
}];
});
我似乎得到了很多以下内容:
2013-02-13 18:55:47.404 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8386a90) → Saving <NSManagedObjectContext (0x8386a90): *** DEFAULT ***> on *** MAIN THREAD ***
2013-02-13 18:55:47.404 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8386a90) → Save Parents? 1
2013-02-13 18:55:47.404 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8386a90) → Save Synchronously? 0
2013-02-13 18:55:47.497 Giordano.iPhone[13956:c07] Image fetched in saveItemFromJson for cid:7218 order_id:10
2013-02-13 18:55:47.497 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8386a90) → Saving <NSManagedObjectContext (0x8386a90): *** DEFAULT ***> on *** MAIN THREAD ***
2013-02-13 18:55:47.498 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8386a90) → Save Parents? 1
2013-02-13 18:55:47.498 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8386a90) → Save Synchronously? 0
2013-02-13 18:55:47.499 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8386a90) Context DEFAULT is about to save. Obtaining permanent IDs for new 10 inserted objects
2013-02-13 18:55:47.501 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) → Saving <NSManagedObjectContext (0x8385aa0): *** BACKGROUND SAVING (ROOT) ***> on *** MAIN THREAD ***
2013-02-13 18:55:47.502 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) → Save Parents? 0
2013-02-13 18:55:47.502 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) → Save Synchronously? 1
2013-02-13 18:55:47.502 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8385aa0) Context BACKGROUND SAVING (ROOT) is about to save. Obtaining permanent IDs for new 10 inserted objects
2013-02-13 18:55:47.505 Giordano.iPhone[13956:c07] __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke21(0x8385aa0) → Finished saving: <NSManagedObjectContext (0x8385aa0): *** BACKGROUND SAVING (ROOT) ***> on *** MAIN THREAD ***
2013-02-13 18:55:47.505 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
错误信息如下:
2013-02-13 18:55:47.511 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
2013-02-13 18:55:47.512 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
2013-02-13 18:55:47.512 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
2013-02-13 18:55:47.512 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
2013-02-13 18:55:47.513 Giordano.iPhone[13956:c07] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8385aa0) NO CHANGES IN ** BACKGROUND SAVING (ROOT) ** CONTEXT - NOT SAVING
2013-02-13 18:55:47.515 Giordano.iPhone[13956:c07] Error: (null)
2013-02-13 18:55:47.515 Giordano.iPhone[13956:c07] Error: (null)
2013-02-13 18:55:47.515 Giordano.iPhone[13956:c07] Error: (null)
我避免使用 saveInBackgroundWithBlock
因为它已被弃用(文档需要更新?)
对我的代码有什么问题有什么想法吗?
更新
我的团队认为 MagicalRecord 现在的问题太多了。我们已经完全将我们的代码从 MR 迁移回 CoreData。感谢您的关注。
最佳答案
我遇到了同样的问题!只有当我在没有 MR 的情况下自己手动保存上下文时才修复。
这是我的解决方案:
NSManagedObject+MyCategory.h
+ (void)saveDataInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))saveBlock
completion:(void(^)(void))completion;
+ (NSManagedObjectContext *)newMergableBackgroundThreadContext;
- (void)saveWithCompletion:(void(^)(void))completion;
.m
+ (NSManagedObjectContext *)newMergableBackgroundThreadContext {
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.parentContext = [self mainThreadContext];
[context.userInfo setObject:[NSNumber numberWithInteger:VKCoreDataManagedObjectContextIDTempBackground]
forKey:@"contextID"];
[context.userInfo setObject:kVKCoreDataManagedObjectContextBackgroundTemp
forKey:@"contextDebugName"];
VKDLog(@"* New mergable backround context created! *");
return context;
}
+ (void)saveDataInBackgroundWithBlock:(void (^)(NSManagedObjectContext *))saveBlock completion:(void (^)(void))completion {
NSManagedObjectContext *tempContext = [self newMergableBackgroundThreadContext];
[tempContext performBlock:^{
if (saveBlock) {
saveBlock(tempContext);
}
if ([tempContext hasChanges]) {
[tempContext saveWithCompletion:completion];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
if (completion) {
completion();
}
});
}
}];
}
- (void)saveWithCompletion:(void(^)(void))completion {
[self performBlock:^{
NSError *error = nil;
if ([self save:&error]) {
NSNumber *contextID = [self.userInfo objectForKey:@"contextID"];
if (contextID.integerValue == VKCoreDataManagedObjectContextIDMainThread) {
dispatch_async(dispatch_get_main_queue(), ^{
if (completion) {
completion();
}
});
}
[[self class] logContextSaved:self];
if (self.parentContext) {
[self.parentContext saveWithCompletion:completion];
}
} else {
[VKCoreData handleError:error];
dispatch_async(dispatch_get_main_queue(), ^{
if (completion) {
completion();
}
});
}
}];
}
这里是使用示例:
[NSManagedObjectContext saveDataInBackgroundWithBlock:^(NSManagedObjectContext *localContext){
// do your stuff with local context
} completion:^{
// handle completion, update UI or something
}];
关于ios - MagicalRecords 通过图像获取在后台线程中持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867102/
我如何在 MagicalRecord 中为此找到替换方法(已弃用)?我看过谷歌、SO 和文档;似乎没有什么可以替代,当然,文档中没有任何内容告诉您是什么取代了已弃用的方法。 :-{ [[NSManag
我的服务器以“yyyy-MM-dd'T'HH:mm:ss'Z'”格式提供UTC日期,例如MST 的 11 月 15 日午夜是“2013-11-15T07:00:00Z”。这种格式是 MagicalRe
我像这样设置我的 MagicalRecord 堆栈: MagicalRecord.setupAutoMigratingCoreDataStack() let moc = NSManagedObject
@编辑@PangHoMing - 我会再次一步一步地做。首先设置 - 按照您的建议 MagicalRecord.setLoggingLevel(.verbose) MagicalRec
大家好, 我正在使用 MagicalRecord 并尝试删除两个实体之间建立的关系 联系>组 一个联系人可以与多个组相关,一个组也可以与多个联系人相关。 比如Ben在第1组,Alex也在第1组,我想把
我正在从我无法控制的网络服务中导入 JSON 响应。此响应包含我映射到 Show 实体的元素,该实体在同一 JSON 中具有多个相关的 Artwork 对象。 我通过 userinfo 键建立了关系,
似乎我什么都试过了,但似乎只在主线程中有效。例如: [SomeClass MR_createEntity]; [[NSManagedObjectContext MR_defaultContext] M
我使用 MagicalRecord 作为处理 Core Data 的一个很好的库。我的问题是如何在我的应用程序进入后台之前保存数据。因为我尝试通过 block 写入数据,当然它不会工作,因为应用程序将
我是 MagicalRecord 的新手。我在通过不同方法更新相同实体时遇到问题。这是我的例子:我有一些从网络服务获得的广告。完成后,如果有任何事件属性设置为 0,我需要更新数据库中的广告。我需要立即
我想知道为什么我的核心数据停止保存更改。事实上,上面的代码几小时前就可以工作了。当我尝试打印出错误时,它打印出 (null)。下面的代码是 NSManagedObjectSubclass 的自定义方法
我正在开发一款游戏,我正在使用 MagicalRecord 来存储高分。该游戏有 4 种模式和 2 种“类型”,因此有 8 种组合可供选择,我想为每一种组合打高分。我正在使用这个逻辑: NSArray
我尝试获取用户保存在应用程序中的所有元素(这可能很容易),从每条记录中获取一个属性并将这些属性列在一个字符串中(这就是问题所在)。我该怎么做?我写了一些东西,但我认为这不是正确的方法。请帮助我! -
我有这个代码: HLMReferenceData *referenceDataObj = [HLMReferenceData createEntity]; [MagicalRecord saveWit
我正在使用返回结果的网络服务,如下例所示: { "name":"Frank", "meals":[ "cheeseburger", "lasagne" ] }
我正在尝试将数据导入 Core Data 并使用 MagicalRecord 将其保存在后台线程中。 我基本上是在尝试这样做: __block User *user = nil; [MagicalRe
对于每次应用程序更新,我都想彻底删除我的整个 Core Data 数据库,然后重新设置它。我没有成功这样做。我尝试了各种方法,这似乎是我最接近的方法。我找到了几个 SO 帖子,但没有一个解决方案适合我
在 iOS5.0 中,使用 arc,我使用 Magical record 在核心数据中创建对象。我有一个产品对象,它与 Promotion 对象具有称为“currentPromotions”的一对多关
我有以下格式的日期: 2013-05-04T05:07:09+00:00 我正在使用 MagicalRecord 自动映射 NSDate。据我所知,上述日期格式应符合 MagicalRecord 的默
我有以下代码: dispatch_async(dispatch_get_main_queue(), ^{ NSManagedObjectContext *localContext = [NSM
我正在尝试 MagicalRecord 的一些非常基本的实现,以掌握它并遇到以下问题。 当我保存一个条目然后获取该类型的条目时,它会出现我刚刚保存的条目。但是,当我保存条目、关闭应用程序、重新启动它然
我是一名优秀的程序员,十分优秀!