Ios UIViewController与CoreData的继承
我有一个名为Ios UIViewController与CoreData的继承,ios,objective-c,uitableview,core-data,nsmanagedobject,Ios,Objective C,Uitableview,Core Data,Nsmanagedobject,我有一个名为BaseController的UIViewController,这个控制器拥有屏幕的所有功能、从服务下载数据等 我目前在一个名为HomeVC的UIViewController中,它继承自BaseController,初始化此UIViewController时,我调用一个方法从服务下载数据,下载数据后,我插入数据(让我们调用对象DbHomeData)进入CoreData并在HomeVC上的UITableView中显示它 当我单击其中一个UITableView单元格时,问题就出现了,它会
BaseController
的UIViewController
,这个控制器拥有屏幕的所有功能、从服务下载数据等
我目前在一个名为HomeVC
的UIViewController
中,它继承自BaseController
,初始化此UIViewController
时,我调用一个方法从服务下载数据,下载数据后,我插入数据(让我们调用对象DbHomeData
)进入CoreData
并在HomeVC
上的UITableView
中显示它
当我单击其中一个UITableView
单元格时,问题就出现了,它会推送一个新的UIViewController
,它也从BaseController
继承
这个新的UIViewController
正在下载新数据,并像HomeVC
一样将其再次插入CoreData
,但是现在我将旧数据和新下载的数据放在一起,但是如果我将删除旧数据,那么当我弹出这个UIViewController
,我会将其删除,旧数据将消失,UITableView
将不显示任何内容
我如何解决或修复此问题?是否有一种方法可以初始化NSManagedObject
,而不将其插入CoreData
?有更好的解决办法吗
提前谢谢
有没有一种方法可以在不将NSManagedObject插入CoreData的情况下初始化它
是的,你可以这样做:
NSManagedObject *myObj = [[NSManagedObject alloc] initWithEntity:myEntity insertIntoManagedObjectContext:nil];
这将实例化一个新的NSManagedObject
,但不会将其与上下文关联
有更好的解决办法吗
很难说。你没有给我们太多的东西,但我认为你的主要问题是你为自己建立的继承结构。考虑将下载代码放在单独的模型类中(例如,
MyDownloadManager
),而不是控制器类中。记住MVC设计模式。下载的代码在一个名为DownloadManager
的单独模型类中,但我在初始化BaseController
时调用它。我唯一的问题是,在初始化同一个类两次之后,如何处理已经下载的数据?两者都是BaseController
,因此它们具有相同的生命周期,即从服务下载数据,但每次下载都使用不同的参数。对象被插入到相同的核心数据
实体
。如何处理已下载的数据?您可以将其保存到CoreData中,并在控制器出现时重新蚀刻它。或者你可以摆脱它。你想不想保留这些数据?此外,我不会将下载代码放在超类中,而是在需要时将其放在每个子类中。这里的问题不是类
或超类
,这里的问题是下载的数据保存到核心数据
,但我只想保存第一个下载的数据,而不是第二个。第二个数据是在我调用了过滤数据的WebService
请求之后,但该数据仅用于过滤结果控制器。然后它们都被保存到CoreData
中,我在同一实体中得到了重复的数据。另外,当我尝试在没有上下文的情况下初始化NSManagedObject
时,它崩溃了。我假设FilteredVC只过滤BaseVC下载的数据,HomeVC显示所有未过滤的数据?如果是这样的话,我只会在HomeVC而不是BaseVC中下载,然后在FilteredVC中,我会从上下文中获取数据,然后对其进行过滤,而不是再次下载。(顺便说一句,我在这里假设了很多,因为我不知道你在家里下载的东西和FilteredVC是否相同。)我认为你需要停止使用烹饪书。它是什么烹饪书?它是你复制代码的来源。我没有复制这段代码,是我写的。