假设您正在为Core Data中的外卖餐厅建模。每个Restaurant
都应该有一个phoneNumber
属性,但根据用户的街道地址,它会有所不同。不过不用担心,有一个REST API可以帮助您将街道地址和餐馆ID转换为电话号码。
我想对phoneNumber
的{{1}}属性进行建模,以便联系REST API:
Restaurants
属性时)我正在考虑的策略是这样的:
phoneNumber
布尔值
phoneNumberLoaded
时返回nil
phoneNumber
属性:
phoneNumber
方法preloadPhoneNumber
,将phoneNumber
设置为phoneNumberLoaded
我可以上班,还是有人有更好的策略?
答案 0 :(得分:2)
我不知道这是不是你的意思,但这就是我的看法:
餐厅<< - >地址(城市,街道,needPhoneResolutoin [BOOL],phoneNumber [默认值:nil])
创建一个将处理分辨率的类(PhoneResolver)
解析器将具有带实体的FRC:Address
,谓词:needPhoneResolution == YES AND phoneNumber == nil
实现委托方法,但只处理插入的对象(以及第一次执行提取调用后存在的所有对象)和已删除的对象(清理)。
批量处理(-controllerDidChangeContent:
)
执行REST获取
更新数据库。
报告无法解析(需要进行另一次提取,或将地址标记为无法解析)。
这样,您不需要自己实现队列或KVO(由CoreData提供),并且根据位置原则,如果用户请求电话一次(并且提取失败),您仍然可以保留用户对该手机的请求,并在每次启动解析程序时尝试获取该手机。