-3

我想从我的主视图控制器中删除具有黄色阴影的视图。核心数据:删除存储在核心数据中的视图

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

      } 
     } 
    } 
} 
+4

你的问题是混乱的,这是很难说的连接是什么去除一个UIView和核心数据之间。您的'trashitems'方法也不会调用'removePageAtIndex',反之亦然,所以不清楚它们是如何连接的。托管对象上下文不控制UIViews,所以你究竟在这里做什么? –

+0

我尝试更新我忘了部分代码,但我有存储在核心数据(页)的观点,我想选择它们时要删除的页面,有一个黄色的影子。 – BDGapps

+1

比较图层的阴影颜色是确定要删除哪些数据的一种很差的方法。你应该给模型对象一些你可以测试的属性,比如'shouldDelete',并且让它决定使用什么阴影颜色。除了目前的方案明显违反了MVC之外,有太多的方法可能会出错,例如,你确定'[UIColor yellowColor] .CGColor'总是返回相同的CGColorRef吗?你确定图形系统中没有东西会改变你分配的颜色吗? – Caleb

回答

1

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

1

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

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

你说:

我想删除有 从我的主要 视图 - 控制一个黄影的看法。

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

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

当您使用核心数据时,可以使用它来创建模型图层。您不使用它创建控制器,视图或存储与控制器或视图操作直接相关的任何状态信息。理想情况下,无论您最终使用什么样的界面,数据模型都应该是完美的功能,即它应该与命令行,GUI,网页或进程间通信同样适用。它根本不知道或关心与数据和相关逻辑没有直接关系的任何事情(例如,需要删除某个日期之前的某个日期的图像),以确定数据如何配合在一起。

所以,你需要弄清楚什么是数据和数据逻辑,并把在核心数据,同时保持UI的细节显示,在控制器和视图中的数据。

我真的不能告诉你,你需要什么做的,因为我不知道它的数据逻辑是什么数据应用程序使用或什么,但我知道,你需要采取有关实际视图的所有信息和他们的核心数据配置。