簡體   English   中英

Objective-C:在兩個視圖控制器之間共享對象

[英]Objective-C: Share object between two view controllers

我有一個iPhone應用程序,我在MyView1Controller執行此MyView1Controller

MyView2Controller *myV2C = [[MyView2Controller alloc] initWithNibName:@"MyView2" bundle:nil];
myV2C.shareObject = self.shareObject;
[self.navigationController pushViewController:myV2C animated:YES];
[myV2C release];

所以我將shareObjectshareObject下一個ViewController。 在那里,在viewDidLoad ,我像這樣設置shareObject的屬性:

self.shareObject.myText = @"Test String";

所以在MyView2Controller中,一切正常,String已設置。 但是使用左上方的“后退”按鈕返回上一個MyView1ControllershareObject.myText的值未設置為Test String

那么,我該怎么做呢? 我想給View2Controller一個可以修改的對象,以及我希望在View1Controller中進行的修改。

有人知道嗎? 提前謝謝你,最誠摯的問候,蒂姆。

您可以使用委托模式和/或鍵值觀察

編輯:你可以創建一個單獨的對象,然后在所有類中使用該對象,無論你想要什么。 為此你可以使用單例類,或者你可以創建一個類方法。 例如:如果我有A類,並且我想在B類中推送一些值,那么如果我修改B中的值,則可以在過去或任何其他類中檢索新更新的值。 在這種情況下,您可以創建一個不同的類(通常是NSObject的子類),然后在其中編寫getter / settor方法。

假設這個新創建的類的名稱是Manager,然后是Manager。 m創建getter / setter方法,比如

NSString *strGlobal;
+(void)setString:(NSString *)strTemp
{
if(!strGlobal)
{
    strGlobal = [[NSString alloc] init];
}

//point to same location
strGlobal = strTemp;
}

+(NSString *)getMySavedString
{
    return strGlobal;
}

現在在你想要將值發送到B類控制器的A類中,調用setter方法來設置值,如: -

-(void)navigateto_ClassB
{
         //Setting the value, that should be sent to the other controller
     [ManagerClass setString:@"Hello"];
     [self.navigationController pushViewController:[[[ClassB alloc]init] autorelease] animated:YES];
}

現在在B類(或者你想要獲得保存值的任何地方,使用getter方法,如: -

     NSString *strSavedValue = [ManagerClass getMySavedString];

不會有值,如果要從任何地方更新值,請再次使用新值調用setter方法。 例如,我想更新B類中的值,然后

 [ManagerClass setString:@"Hello Upadted"];

現在,此值將更新到相同的內存位置,使用在Manager類中創建的getter方法從任何位置檢索它。

正如我之前所說,這是最簡單但不是最好的方法。 或者,您可以使用委托模式,KVO(鍵值觀察)和/或單例類來實現相同的功能。

或者您甚至可以嘗試使用Singleton模式

http://www.cocoadev.com/index.pl?SingletonDesignPattern

tia是對的:“您已經做對了,所以某個地方一定有問題”。 這是我的錯,所以我的問題中的源代碼是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM