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是否相同。)我认为你需要停止使用烹饪书。它是什么烹饪书?它是你复制代码的来源。我没有复制这段代码,是我写的。