其中一個很好的解決方案是實現委託模式(可可一個共同的模式):
在ViewControllerB.h聲明一個ViewControllerBDelegate協議。 然後在你的ViewControllerB接口中添加一個委託爲伊娃。
//ViewControllerB.h
@class ViewControllerB;
@protocol ViewControllerBDelegate <NSObject>
@required
- (void)viewControllerB:(ViewControllerB *)controller didChangeValueTo:(NSString *)value;
@end
@interface ViewControllerB : UIViewController
@property (weak, nonatomic) id<ViewControllerB> delegate;
[...]
然後當值已改變(或當用戶確認更改)的事件發送到代理這樣的:
if ([self.delegate respondsToSelector:@selector(viewControllerB:didChangeValueTo:)])
{
[self.delegate viewControllerB:self didChangeToValue:newValue];
}
在ViewControllerA只是做
ViewControllerB *viewController = [...]; //initialization
[viewController setDelegate:self];
和添加方法:
- (void)viewControllerB:(ViewControllerB *)controller didChangeValueTo:(NSString *)value
{
[...];//your stuff here
}
Tx @France scu,我想你們是「靠書」的正確方式。我使用了簡化版本,因爲我已經有ViewControllerA作爲ViewControllerB的委託。我更新了NSArray,它在viewWillAppear中存儲了pickerview的Core Data對象,重新加載了選擇器視圖,但沒有聲明它是一個協議,因爲我不熟悉Objective-C(來自Java/Android)中的協議。但是,這有效... – mrd