選項1:使用NSUserDefaults的存儲和檢索數據
步驟1:用於存儲
NSUserDefaults in VC3 view controller
[[NSUserDefaults standardUserDefaults] setObject:@"hello" forKey:@"mydata"];
步驟2:用於檢索
NSUserDefaults in VC1 or any other controller:
NSString* receivedData = [[NSUserDefaults standardUserDefaults] objectForKey:@"mydata"];
選項2:使用代表團和協議
在VC3.h
@class VC3;
@protocol VC3Delegate <NSObject>
- (void)addItemViewController:(VC3 *)controller didFinishEnteringItem:(NSString *)item;
@end
@interface
@property (nonatomic, weak) id <VC3Delegate> delegate;
在VC3我們所說的消息,當我們跳出委託視圖控制器。
NSString *itemToPassBack = @"Pass this value back to VC1";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
以上就是VC3。現在在VC1.h中,告訴VC1導入VC3並符合其協議。
#import "VC3.h"
@interface VC1 : UIViewController <VC3Delegate>
在VC1.m從我們的協議實現以下方法
- (void)addItemViewController:(VC3 *)controller didFinishEnteringItem:(NSString *)item
{
NSLog(@"This was returned from VC3 %@",item);
}
我們需要做的最後一件事就是告訴VC3是VC1是其委託我們對推前VC3導航堆棧。
NSMutableArray *arrayOfControllers = [[NSMutableArray alloc] initWithObjects:self.navigationController.viewControllers, nil];
for (UIViewController *vc in arrayOfControllers) {
if ([vc isKindOfClass:[VC3 class]]) {
//It exists
vc.delegate = self;
}
傳遞從一個VC1到VCN – Rajesh
不,絕對不使用一個單獨的數據使用辛格爾頓數據存儲庫。這不是單身人士的目的。這樣做只會導致未來的痛苦。建議使用展開Segmentation,如@nkukushkin。 – Fogmeister
但Unwind Segues必須退出第三個VC,對吧?如果我不想退出第三個VC,該怎麼辦? – user3322987