![](/img/trans.png)
[英]How do I share common methods between view controllers in 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];
所以我將shareObject
推shareObject
下一個ViewController。 在那里,在viewDidLoad
,我像這樣設置shareObject
的屬性:
self.shareObject.myText = @"Test String";
所以在MyView2Controller中,一切正常,String已設置。 但是使用左上方的“后退”按鈕返回上一個MyView1Controller
, shareObject.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模式
tia是對的:“您已經做對了,所以某個地方一定有問題”。 這是我的錯,所以我的問題中的源代碼是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.