こんにちは、iPhone 開発者の皆さん。
私は経験豊富なソフトウェア エンジニアですが、iPhone プラットフォームは初めてです。サブクラス化されたView Controllerの実装に成功し、View Controllerスタックで親/子ビューをプッシュおよびポップできます。ただし、オブジェクトが子View Controllerで編集されているときにView Controllerを更新しようとすると、問題が発生しました。何度も実験に失敗した後、これを行うのに最適な方法のように見えるキー値オブザーバー API を発見しました。次に、メイン/親View Controllerにオブザーバーを登録し、オブザーバーでビューをリロードする予定です。アイデアは、オブジェクトが子View Controllerで編集されると、これが起動されるということです。ただ、オブザーバーが登録されていないと思うのは、編集中のView Controllerで値が更新されていることがわかっているので(デバッガーで確認できます)、
助けてください!
以下にコード スニペットを示します。
観察中の物体。setvalue メッセージで呼び出されたときに値が設定されるため、これはキー値に準拠していると思います (以下の子ビュー コントローラーを参照)。
じ:
@interface X : NSObject <NSCoding> {
NSString *name;
...
@property (nonatomic, retain) NSString *name;
Xm:
@implementation X
@synthesize name;
...
メイン ビュー Controller.h:
@class X;
@interface XViewController : UITableViewController {
X *x;
...
メイン ビュー Controller.m:
@implementation XViewController
@synthesize x;
...
- (void)viewDidLoad {
...
[self.x addObserver:self
forKeyPath: @"name"
options: (NSKeyValueObservingOptionNew |
NSKeyValueObservingOptionOld)
context:nil];
[super viewDidLoad];
}
...
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqual:@"name"]) {
NSLog(@"Found change to X");
[self.tableView reloadData];
}
[super observeValueForKeyPath:keyPath
ofObject:object
change:change
context:context];
}
Child View Controller.m: (これにより、子View Controllerのオブジェクトの値が正しく設定されます)
[self.x setValue:[[tempValues objectForKey:key] text] forKey:@"name"];