核心数据:删除核心数据中存储的视图

时间:2011-07-05 15:40:41

标签: ios model-view-controller core-data uiview nsmanagedobjectcontext

我正在尝试删除主视图控制器中带有黄色阴影的视图。

它正确注册了数字,但没有删除。 (它不会更新我试图调用setNeedsDisplay和所有这些行的视图但是不起作用。它只会在您退出应用程序时重新加载它更新。它不在managedobjectcontext中但它保持不变在视图中。我没有发布什么东西?)如果我拥有它所以它只传递了一个项目..如果你点击它删除..它会工作但这不适用于阴影。你能明白为什么???

更新: 我有存储在核心数据(页面)中的视图,我想在选择它们时删除页面并具有黄色阴影。如果我需要如何在添加阴影时将视图添加到数组或其他内容,然后在需要删除时找到它们。

-(void)trashitems{
  for (NSString *itemKey in [itemViews allKeys]){
      UIView<CollectionViewItemView> *itemview = [itemViews objectForKey:itemKey];
      if ([itemview layer].shadowColor == [UIColor yellowColor].CGColor){
          NSLog(@"remove %i",[[NSDecimalNumber decimalNumberWithString:itemKey] unsignedIntegerValue]);

          if ([dataDelegate respondsToSelector:@selector(collectionView:canDeleteItemAtIndex:)]
              && [dataDelegate collectionView:self canDeleteItemAtIndex:[[NSDecimalNumber decimalNumberWithString:itemKey] unsignedIntegerValue]]
              && [dataDelegate respondsToSelector:@selector(collectionView:didDeleteItemAtIndex:)])
          {            
              [itemViews release];
              NSUInteger itemsCountBeforeDeletion = [dataDelegate countOfItemsInCollectionView:self];
              [dataDelegate collectionView:self didDeleteItemAtIndex:[[NSDecimalNumber decimalNumberWithString:itemKey] unsignedIntegerValue]];
              NSUInteger itemsCountAfterDeletion = [dataDelegate countOfItemsInCollectionView:self];
              if (itemsCountBeforeDeletion - 1 != itemsCountAfterDeletion){
                  [NSException raise:@"Collection View Deletion Exception" format:@"Count of items in collection view before deletion (%u) must equal one more than count of items in collection view after deletion (%u) but did not.", itemsCountBeforeDeletion, itemsCountAfterDeletion];
              }

          }
      }
  }
}

2 个答案:

答案 0 :(得分:1)

就像汤姆所说,在核心数据中存储视图是奇怪的。要使视图消失,需要从视图层次结构中删除它。数据应与视图分开。我强烈建议阅读MVC(模型 - 视图 - 控制器)设计模式。

答案 1 :(得分:1)

这里有一个严重的设计问题。这根本不起作用,你需要重新开始。

Apple API使用模型 - 视图 - 控制器设计模式。它应该被称为模型 - 控制器 - 接口设计模式,因为它更好地捕获了真实的关系。模型保存数据和数据行为,控制器将模型连接到接口,接口将数据提供给外部观察者,例如人类查看命令行/ GUI,另一个进程或远程服务器进程。

你这么说:

  

我正在尝试删除有的视图   我主要的黄色阴影   视图控制器。

......但你真的没有。子视图本身显示某种数据,例如黄色阴影向用户传达关于该数据状态的某种信息,例如图像。黄色阴影表示图像比某个日期旧。您真正想要做的是(在此示例中)删除早于特定日期的图像,然后您希望用户界面的视图反映数据中的更改。

现在,图像的数据及其早于特定日期的状态属于模型。控制器从模型中读取数据,并根据提供的数据配置视图和子视图。控制器不知道为什么视图看起来应该像任何表示的数据一样的逻辑,并且视图根本不知道数据,他们只知道它们将显示什么图像以及它们的阴影是什么颜色。

使用Core Data时,可以使用它来创建模型层。您不使用它创建控制器,视图或存储与控制器或视图的操作直接相关的任何状态信息。理想情况下,无论您最终使用何种类型的接口,数据模型都应该是完美的功能,即它应该与命令行,GUI,网页或进程间通信同样良好地工作。它根本不知道或关心与数据直接相关的任何事物以及数据如何组合在一起的相关逻辑(例如,比特定日期更早的图像需要删除)。

因此,您需要弄清楚什么是数据和数据逻辑,并将其放入Core Data中,同时保持UI的详细信息显示控制器和视图中的数据。

我无法确切地告诉您您需要做什么,因为我不知道您的应用使用的数据或数据逻辑是什么,但我知道您需要获取有关实际视图的所有信息,他们的配置来自Core Data。