2012-04-07 5 views
2

私はかなり簡単なことをしようとしていますが、私はそれを行う最良の方法を見ることができません。私は2つのセルのuitableviewを持って、最初はuidatepickerとして設定された入力ビューでコンテキストビューにuitextfieldを持っています。セルは、nsmanageオブジェクトdateプロパティにマップされます。 nsmanagedオブジェクトには、今日の日付と選択された日付の日数の差異に依存するプロパティがあります。この値は、ビューが読み込まれるときに2番目のセルに表示されます。uitableviewcellを実装する方法値は他のuitableviewcellから派生しました

問題は、ユーザーが最初のセルの日付を変更すると、2番目のセルが自動的に更新されないということです。

まず、uitableviewでsetNeedsDisplayを呼び出すことができると思いました。しかし、これはかなり重い手渡しのようです。

私はKVOを読んできましたが、まだ問題の解決策の良い例を見つけることができませんでした。

私はテーブルビューにfetchresultscontrollerを使用しています。私はiPhoneのドキュメントに示されているようにキーパスの依存関係を実装しようとしましたが、これは成功していません。例えば

...

+ (NSSet *)keyPathsForValuesAffectingDaysRemaining 
{ 
NSLog(@"keyPathsForValuesAffectingDaysRemaining"); 
return [NSSet setWithObjects:@"dateOfOccasion", nil]; 
} 

-(NSNumber *)daysRemaining { 

    return [self.dateOfOccasion daysFromNow]; //simple calendar calc. 
} 

誰かが比較的単純な問題への適切な解決策の正しい方向に私を指すでした。

おかげで、

ゲイリー

答えて

0

私は戦略的に[[self tableView] reloadData]を実装しても問題が解決するべきだと思います。 cell1でオブジェクトを変更するとすぐに、私は変更をグローバルに、またはCoredataに保存すると仮定します。その構成でtableViewを再ロードするだけで問題を解決できます。

あなたの場合、NSFetchedResultsControllerを実装しているため、そのオブジェクトの値を変更するとobjectDidChangeが発生すると思います。 tableView reloadDataは素晴らしい実装です!

+0

私はobjectDidChangeメソッドからreloadDataを呼び出していませんでした、行の値を更新した後、あなたのKVOメソッドで行を再ロードすることができます。私は単にtextFieldDidEndEditingメソッドからそれを呼び出しました。 –

+0

@ sqlconsumer.netそれはまた良いです:) – Legolas

0

値を変更した場合は、行をリロードして内容を更新できます。あなたは

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
関連する問題