亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在視圖控制器之間傳遞數據

在視圖控制器之間傳遞數據

iOS
泛舟湖上清波郎朗 2019-05-20 16:29:02
我是iOS和Objective-C以及整個MVC范例的新手,我堅持以下內容:我有一個視圖作為數據輸入表單,我想讓用戶選擇多個產品。產品列在另一個帶有a的視圖中,UITableViewController我啟用了多個選擇。我的問題是,如何將數據從一個視圖傳輸到另一個視圖?我將UITableView在數組中保留選擇,但是如何將其傳遞回上一個數據輸入表單視圖,以便在提交表單時將其與其他數據一起保存到Core Data?我已經四處瀏覽并看到一些人在app delegate中聲明了一個數組。我讀了一些關于單身人士的事情,但不明白這些是什么,我讀了一些關于創建數據模型的內容。執行此操作的正確方法是什么?我將如何進行此操作?
查看完整描述

4 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

MVC中的M用于“模型”,而在MVC范例中,模型類的作用是管理程序的數據。模型與視圖相反 - 視圖知道如何顯示數據,但它不知道如何處理數據,而模型知道如何處理數據的所有內容,但不了解如何顯示數據。模型可能很復雜,但它們不一定是 - 您的應用程序的模型可能像字符串或字典數組一樣簡單。

控制器的作用是在視圖和模型之間進行調解。因此,它們需要引用一個或多個視圖對象和一個或多個模型對象。假設您的模型是一個字典數組,每個字典代表表中的一行。應用程序的根視圖顯示該表,它可能負責從文件加載數組。當用戶決定向表中添加新行時,他們會點擊一些按鈕,您的控制器會創建一個新的(可變的)字典并將其添加到數組中。為了填充行,控制器創建一個詳細視圖控制器并為其提供新的字典。詳細視圖控制器填寫字典并返回。字典已經是模型的一部分,因此沒有其他任何事情需要發生。


查看完整回答
反對 回復 2019-05-20
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

有多種方法可以將數據接收到iOS中的不同類。例如 -

  1. 分配另一個類后直接初始化。

  2. 委派 - 用于傳回數據

  3. 通知 - 用于一次向多個類廣播數據

  4. 保存NSUserDefaults- 以便稍后訪問

  5. 單身人士課程

  6. 數據庫和其他存儲機制,如plist等。

但是對于將值傳遞給在當前類中完成分配的其他類的簡單方案,最常見和首選的方法是在分配后直接設置值。這樣做如下: -

我們可以使用兩個控制器來理解它 - Controller1和Controller2

假設在Controller1類中,您要創建Controller2對象并使用傳遞的String值推送它。這可以這樣做: -

- (void)pushToController2 {

    Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];
    [obj passValue:@"String"];
    [self pushViewController:obj animated:YES];}

在Controller2類的實現中,將有以下功能 -

@interface Controller2  : NSObject@property (nonatomic , strong) NSString* stringPassed;@end@implementation Controller2
@synthesize stringPassed = _stringPassed;- (void) passValue:(NSString *)value {

    _stringPassed = value; //or self.stringPassed = value}@end

您也可以使用與此類似的方式直接設置Controller2類的屬性:

- (void)pushToController2 {

    Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];
    [obj setStringPassed:@"String"];  
    [self pushViewController:obj animated:YES];}

要傳遞多個值,您可以使用多個參數,例如: -

Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];[obj passValue:@“String1” andValues:objArray withDate:date];

或者,如果需要傳遞超過3個與常用功能相關的參數,則可以將值存儲到Model類中,并將該modelObject傳遞給下一個類

ModelClass *modelObject = [[ModelClass alloc] init]; modelObject.property1 = _property1;modelObject.property2 = _property2;
modelObject.property3 = _property3;Controller2 *obj = [[Controller2 alloc] initWithNib:@"Controller2" bundle:nil];[obj passmodel: modelObject];

所以,如果你想 -

1) set the private variables of the second class initialise the values by calling a custom function and passing the values.2) 
setProperties do it by directlyInitialising it using the setter method.3) pass more that 3-4 values related to each other in some manner , 
then create a model class and set values to its object and pass the object using any of the above process.

希望這可以幫助


查看完整回答
反對 回復 2019-05-20
  • 4 回答
  • 0 關注
  • 921 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號