Core Data:删除存储在Core Data中的视图



我试图从我的主视图控制器中删除有黄色阴影的视图。

正确注册号码,但不删除。(它不更新视图,我试图调用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];
              }
          }
      }
  }
}

就像Tom说的,在Core Data中存储视图是很奇怪的。要使视图消失,需要将其从视图层次结构中移除。数据应该与视图分开。我强烈建议阅读MVC(模型-视图-控制器)设计模式。

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

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

你说:

我正在尝试删除具有一个黄色的影子从我的主viewcontroller。

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

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

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

你需要弄清楚什么是数据和数据逻辑并把它放在Core data中同时保持UI的细节在控制器和视图中显示数据。

我不能确切地告诉你你需要做什么,因为我不知道你的应用程序使用什么数据或它的数据逻辑是什么,但我知道你需要从Core data中获取有关实际视图及其配置的所有信息。

最新更新