【问题标题】:UIViewController inheritance with CoreDataUIViewController 与 CoreData 的继承
【发布时间】:2015-03-15 10:16:59
【问题描述】:

我有一个名为BaseControllerUIViewController,这个控制器拥有屏幕的所有功能,从服务下载数据等等......

我目前在一个名为HomeVCUIViewController 中,它继承自BaseController,当初始化这个UIViewController 时,我正在调用从服务下载数据的方法,下载数据后,我插入数据(让我们调用对象DbHomeData)到CoreData 并在HomeVC 上的UITableView 中显示它。

当我点击其中一个UITableView 单元格时会出现我的问题,它会推送一个新的UIViewController,该UIViewController 也继承自BaseController

这个新的UIViewController 正在下载新数据并再次将其插入CoreData,就像HomeVC 正在做的那样,但是现在我将旧数据和新下载的数据放在一起,但是如果我将删除旧数据,然后当我弹出这个UIViewController 时,旧数据将消失,UITableView 将不显示任何内容。

如何解决或修复此问题?有没有办法初始化NSManagedObject而不将其插入CoreData?有没有更好的解决方案?

提前致谢!

【问题讨论】:

  • 我认为你需要停止使用食谱。
  • 这是什么食谱?
  • 这就是你复制代码的地方。
  • 这段代码不是我抄的,是我写的。

标签: ios objective-c uitableview core-data nsmanagedobject


【解决方案1】:

有没有办法在不将其插入 CoreData 的情况下初始化 NSManagedObject?

是的,你可以这样做:

NSManagedObject *myObj = [[NSManagedObject alloc] initWithEntity:myEntity insertIntoManagedObjectContext:nil];

这会实例化一个新的NSManagedObject,但不会将其与上下文相关联。

有没有更好的解决方案?

很难说。您并没有给我们太多帮助,但我认为您的主要问题在于您为自己设置的继承结构。考虑将您的下载代码放在单独的模型类中(例如MyDownloadManager),而不是控制器类。牢记 MVC 设计模式。

【讨论】:

  • 下载代码在一个名为DownloadManager的单独模型类中,但我在BaseController初始化时调用它。我唯一的问题是在我初始化同一个类两次后如何处理已经下载的数据?它们都是BaseController,因此它们具有相同的生命周期,即从服务下载数据,但每次下载的参数不同。对象被插入到相同的CoreDataEntity
  • 如何处理已经下载的数据?您可以将其保存到 CoreData 并在您的控制器出现时重新获取它。或者你可以摆脱它。您是否要保留数据?此外,我不会将下载代码放在超类中,而是在需要时将其放在每个子类中。
  • 这里的问题不是ClassSuperClass,这里的问题是下载的数据保存到CoreData,但我只是想保存第一个下载的数据,而不是第二。第二个数据是在我调用WebService 请求过滤数据之后,但此数据仅用于过滤结果控制器。然后它们都保存到CoreData 中,我在同一个Entity 中得到重复的数据。
  • 另外,当我尝试在没有上下文的情况下初始化 NSManagedObject 时,它会崩溃。
  • 我假设 FilteredVC 只是过滤 BaseVC 下载的数据,而 HomeVC 显示所有未过滤的数据?如果是这样,那么我只需在 HomeVC 中下载而不是在 BaseVC 中,然后在 FilteredVC 中,我将从上下文中获取数据然后对其进行过滤,而不是再次下载它。 (P.S. 我在这里假设了很多,因为我不知道您在 Home 和 FilteredVC 中下载的内容是否相同。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多