Bar*_*zyk 1 core-data ios magicalrecord swift
只是我有一个应用程序和今天的扩展。我还有两个实体:Goal和Service。
@objc(Goal)
class Goal: NSManagedObject {
@NSManaged var identifier: String
@NSManaged var startDate: Date
@NSManaged var endDate: Date
private var services: [Service] {
let predicate = NSPredicate(format: "date >= %@ && date <= %@", startDate as NSDate, endDate as NSDate)
return Service.mr_findAll(with: predicate) as! [Service]
}
var duration: Int64 {
return services.reduce(0) { $0 + $1.duration }
}
}
Run Code Online (Sandbox Code Playgroud)
当我在今天的扩展程序中创建service
相关并goal
在应用程序中更新它时,更新的结果在今天的扩展程序中不可见,而在应用程序中正确显示。为什么?
这是我在扩展或扩展中创建和更新记录的方式:
MagicalRecord.save({ context in
Service.createOrUpdate(withDuration: duration, date: Date(), identifier: identifier, in: context)
}, completion: { _, error in
//do something on completion
})
Run Code Online (Sandbox Code Playgroud)
扩展程序和应用程序是不同的程序,它们共享一些相同的代码。所以两者都在创建自己的persistentStoreCoordinator 和上下文。
通常在同一个应用程序中,您将有多个上下文都附加到同一个persistentStoreCoordinator 并且其中一个的更改将由通过通知中心发送然后合并的通知处理。在这种情况下有两个问题 - 1)notificationCenter 不在应用程序和扩展程序之间共享,因此它们无法轻松通信;2)上下文不共享相同,persistentStoreCoordinator
因此即使您也无法使用“mergeChangesFromContextDidSaveNotification”确实传递了这些信息。
我以前没有尝试过,但这是我要尝试的:
managedObjectContext
(s)设置stalenessInterval
为 0refreshObject:mergeChanges:
所有核心数据对象来执行此操作,或者执行另一次提取。诀窍是您必须从存储中获取上下文,并从存储中获取从文件中获取的上下文,并且不能访问两者之间的任何缓存。 归档时间: |
|
查看次数: |
567 次 |
最近记录: |