2012-11-03 65 views
1

所以我能夠將數據從第一視角轉移到像這樣的第二種觀點:傳輸數據回到最初查看

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Check Mark Segue"]) 
     { 
     NSLog(@"Transfering Data"); 
     AutoRenewDrop *controller = segue.destinationViewController; 
     controller.transferData = self.renewDate.text; 
     } 
} 

不過,我嘗試傳送回一個新值renewDate.text時用戶點擊完成並且transferData正常工作,但renewDate.text不會更改。這裏是我用來傳回數據的代碼:

-(IBAction)done:(UIStoryboardSegue *)segue { 

[self.navigationController popViewControllerAnimated:YES]; 
AddR *add = [[AddR alloc] init]; 
add.renewDate.text = transferData; 

} 

有人能告訴我如何解決這個問題嗎?

+0

你爲什麼期望它工作? ' - [[SomeClass alloc] init]'每次調用時都會返回一個新實例,所以這會設置AddR類的另一個實例的屬性... *您應該區分類和對象。 – 2012-11-03 14:00:45

+0

我明白了,謝謝你的評論。所以我會做AddR *添加;?對不起,我對Xcode並不陌生,但這是我第一次不得不在視圖之間共享數據,所以我仍然在學習繩索。 – Zack

+1

**不要那麼做!**在這種情況下,它或者將被初始化(並且崩潰),或者將是零,那麼它將不會執行任何操作。你需要添加一個屬性到第二個視圖,將它設置爲第一個視圖(因此本質上是傳遞第一個視圖本身),並且從第二個視圖中,在'self'(指向第一個視圖)上使用該屬性來設置文字。 – 2012-11-03 14:05:15

回答

3

您需要添加包含第一個視圖的參考進入第二視圖屬性:

@interface AutoRenewDrop 
@property(weak, nonatomic) AddR *callerView; 
@end 

然後在第二視圖的實現方法,你可以只更新呼叫者鑑於variale :

-(IBAction)done:(UIStoryboardSegue *)segue { 
[self.navigationController popViewControllerAnimated:YES]; 
callerView.renewDate.text = transferData; 
} 

當然,當實例第二種觀點則必須設置基準,以這樣的方式

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Check Mark Segue"]) 
     { 
     NSLog(@"Transfering Data"); 
     AutoRenewDrop *controller = segue.destinationViewController; 
     controller.transferData = self.renewDate.text; 
     controller.callerView = self; //Here, you are passing the reference to this View 
     } 
} 
+0

非常感謝你的魅力。唯一的事情是我需要用你的答案編輯一件事! @aleroot – Zack

0

您應該使用委託。 您可以閱讀關於協議和代表here的相當不錯的教程。

假設你有2個ViewControllers - VC1和VC2,並且可以說VC1顯示VC2。

在VC2.h

@protocol VC2Delegate <NSObject> 
- (void)updateData:(id)theData; 
@end 

@interface 
@property (nonatomic, weak) id<VC2Delegate> delegate; 
@end 

在VC2.m

@syntesize delegate; 

- (void)done 
{ 
    [delegate updateData:myData]; 
} 

在VC1.h

@interface VC1 : UIViewController<VC2Delegate> 

在VC1.m

- (void)goToVC2 
{ 
    VC2 *vc2 = [[VC2 alloc] init]; 
    vc2.delegate = self; 
    // present vc2 
} 

- (void)updateData:(id)data 
{ 
    // update what you need 
}