-3

メインビューコントローラから黄色い影を持つビューを削除しようとしています。コアデータ:コアデータに保存されているビューを削除する

番号を正しく登録しますが、削除しません。 (それは私がsetNeedsDisplayとそれらの行のすべてを呼び出そうとしたビューを更新しませんが、動作しません。それは、アプリケーションを終了したときに更新するだけです。私が何かをリリースしていないのですか?)もしそれを持っていたら、それは1つの項目を渡しただけです..削除するためにそれをクリックすると、それは働いていましたが、これは影では機能しません。あなたはなぜか分かりますか?

更新: 私はコアデータ(ページ)に保存されているビューを持っており、選択されたときにそのページを削除して、黄色の影を残したいと思います。ビューを配列などに追加する方法が必要な場合は、シャドウを追加してから削除する必要があるときにそれらを見つけます。

-(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'を呼び出すのではなく、その逆もあります。そのため、どうやって接続されているのかは分かりません。マネージオブジェクトのコンテキストはUIViewを制御しないので、ここで実際に何をしようとしていますか? –

+0

コードを更新しようとしましたが、部品を忘れましたが、コアデータ(ページ)に保存されているビューがあり、選択されたときにそのページを削除して、黄色の影が残るようにしたい。 – BDGapps

+1

レイヤのシャドーカラーを比較することは、削除するデータを判断するうえで貧弱な方法です。モデルオブジェクトに 'shouldDelete'のようないくつかの属性をテストして、どのようなシャドウカラーを使うのか決定するようにしてください。現在のスキームがMVCの明確な違反であることを除けば、これが間違っている可能性がある方法が多すぎます。 '[UIColor yellowColor] .CGColor'は常に同じCGColorRefを返しますか?あなたはグラフィックスシステムで何もあなたが割り当てる色を変えることはないと確信していますか? – Caleb

答えて

1

コアデータにビューを格納することは奇妙です。ビューを消すには、ビューの階層から削除する必要があります。データはビューから分離する必要があります。私は、MVC(Model-View-Controller)デザインパターンを読むことを強く勧めます。

1

ここでは深刻な設計上の問題があります。これは単に機能しないので、最初からやり直す必要があります。

Apple APIは、Model-View-Controllerデザインパターンを使用します。モデルコントローラーインターフェイス設計パターンと呼ばれていたのは、実際の関係をよりよく把握できるからです。モデルはデータとデータビヘイビアを保持し、コントローラはモデルをインタフェースに接続し、インタフェースはコマンドライン/ GUI、別のプロセスまたはリモートサーバプロセスを見ている人間などの外部観察者にデータを提供します。

は私が私のメイン のViewControllerから 黄色の影を持つビューを削除しようとしています:

あなたがいることを言います。

...しかし、あなたは本当にありません。サブビュー自体は何らかの種類のデータを表示する。黄色の影がそのデータの状態に関する何らかの種類の情報をユーザに伝えている間に画像を表示する。黄色の影は、画像が日付より古いことを示します。実際に何をしようとしているのか(この例では)は、特定の日付よりも古いイメージを削除し、ユーザーインターフェイスのビューにその変更が反映されるようにします。

ここで、画像のデータと、特定の日付より古い画像の状態がモデルに属しています。コントローラはモデルからデータを読み取り、提供されたデータに従ってビューとサブビューを構成します。コントローラは、表示されたデータのどのようなビューでも、ビューがデータを全く知らないように見える理由のロジックを知らず、表示するイメージとシャドウの色を知っているだけです。

コアデータを使用している場合は、これを使用してモデルレイヤーを作成します。コントローラーやビューを作成したり、コントローラーやビューの操作に直接関係するステート情報を保存したりすることはありません。理想的には、最終的に使用するインターフェースの種類にかかわらず、データモデルは完全に機能するはずです。つまり、コマンドライン、GUI、Webページまたはプロセス間通信でも同じように機能するはずです。それは、データとそれに関連するロジック(例えば、特定の日付より古いイメージを削除する必要があるなど)に直接関係しないものは、データがどのように適合するかを知らないか、または気にしない。

したがって、データとデータロジックが何であるかを把握し、そのデータをコントローラとビューに表示するUIの詳細を維持しながら、コアデータに配置する必要があります。

あなたのアプリがどのデータを使用しているのか、そのデータロジックが何であるのかわからないので、私はあなたがする必要があることを本当に正確に伝えることはできませんが、実際の表示に関するすべての情報コアデータからの構成について説明します。

関連する問題