UIViewController 继承与 CoreData
UIViewController inheritance with CoreData
我有一个名为 BaseController
的 UIViewController
,这个控制器拥有屏幕的所有功能,从服务下载数据等等...
我目前在一个名为 HomeVC
的 UIViewController
中,它继承自 BaseController
,当初始化此 UIViewController
时,我正在调用一个方法来从中下载数据服务,下载数据后,我将数据(让调用对象 DbHomeData
)插入 CoreData
并在 HomeVC
上的 UITableView
中显示它。
当我单击 UITableView
单元格之一时,我的问题出现了,它会推送一个新的 UIViewController
,它也继承自 BaseController
。
这个新的 UIViewController
正在下载新数据并像 HomeVC
一样将其再次插入 CoreData
,但现在我同时拥有旧数据和新下载的数据,但是如果我要删除旧数据,那么当我弹出这个 UIViewController
时,旧数据将消失并且 UITableView
将不显示任何内容。
如何解决或修复此问题?有没有办法初始化NSManagedObject
而不插入CoreData
?有更好的解决方案吗?
提前致谢!
Is there a way to initialize NSManagedObject without inserting it into CoreData?
是的,你可以这样做:
NSManagedObject *myObj = [[NSManagedObject alloc] initWithEntity:myEntity insertIntoManagedObjectContext:nil];
这会实例化一个新的 NSManagedObject
但不会将其与上下文相关联。
Is there a better solution?
很难说。您没有给我们太多的帮助,但我认为您的主要问题在于您为自己设置的继承结构。考虑将您的下载代码放在单独的模型 class(例如 MyDownloadManager
)中,而不是放在控制器 class 中。牢记 MVC 设计模式。
我有一个名为 BaseController
的 UIViewController
,这个控制器拥有屏幕的所有功能,从服务下载数据等等...
我目前在一个名为 HomeVC
的 UIViewController
中,它继承自 BaseController
,当初始化此 UIViewController
时,我正在调用一个方法来从中下载数据服务,下载数据后,我将数据(让调用对象 DbHomeData
)插入 CoreData
并在 HomeVC
上的 UITableView
中显示它。
当我单击 UITableView
单元格之一时,我的问题出现了,它会推送一个新的 UIViewController
,它也继承自 BaseController
。
这个新的 UIViewController
正在下载新数据并像 HomeVC
一样将其再次插入 CoreData
,但现在我同时拥有旧数据和新下载的数据,但是如果我要删除旧数据,那么当我弹出这个 UIViewController
时,旧数据将消失并且 UITableView
将不显示任何内容。
如何解决或修复此问题?有没有办法初始化NSManagedObject
而不插入CoreData
?有更好的解决方案吗?
提前致谢!
Is there a way to initialize NSManagedObject without inserting it into CoreData?
是的,你可以这样做:
NSManagedObject *myObj = [[NSManagedObject alloc] initWithEntity:myEntity insertIntoManagedObjectContext:nil];
这会实例化一个新的 NSManagedObject
但不会将其与上下文相关联。
Is there a better solution?
很难说。您没有给我们太多的帮助,但我认为您的主要问题在于您为自己设置的继承结构。考虑将您的下载代码放在单独的模型 class(例如 MyDownloadManager
)中,而不是放在控制器 class 中。牢记 MVC 设计模式。