我很難理解父母和孩子如何溝通(以及他們如何將數據傳遞給對方)。我有兩個簡單的對象(兩個ViewControllers)。我明白,父子關係應該允許我使用屬性將兩個變量從子對象傳遞到父對象。因爲我包括Obj。 B到Obj A我假設A是父母,B是孩子。我也明白,孩子知道父母,但反之亦然,這是正確的嗎?使用Obj.C中的屬性將數據傳遞給對象
我收錄了Obj。 B進入Obj。 A和我希望能夠訪問我在Obj的頭文件中聲明的一些變量。 B
有人能給我一個非常簡單的例子,並幫助我結束我的困惑嗎?非常感謝。
我很難理解父母和孩子如何溝通(以及他們如何將數據傳遞給對方)。我有兩個簡單的對象(兩個ViewControllers)。我明白,父子關係應該允許我使用屬性將兩個變量從子對象傳遞到父對象。因爲我包括Obj。 B到Obj A我假設A是父母,B是孩子。我也明白,孩子知道父母,但反之亦然,這是正確的嗎?使用Obj.C中的屬性將數據傳遞給對象
我收錄了Obj。 B進入Obj。 A和我希望能夠訪問我在Obj的頭文件中聲明的一些變量。 B
有人能給我一個非常簡單的例子,並幫助我結束我的困惑嗎?非常感謝。
要從ViewControllerA
直傳數據(對象或值)爲ViewControllerB
推或呈現ViewControllers,你需要做的是這樣的:
(例如,通過一個的NSString一個ViewControllerB
從ViewControllerA
)
向前傳遞數據,而無需故事板:
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
viewControllerB.aString = myString; // myString is the data you want to pass
[self presentViewController:viewControllerB animated:YES completion:nil];
使用UINavigationController
:
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
viewControllerB.aString = myString;
[self.navigationController pushViewController:viewControllerB animated:YES];
和內部viewControllerB
,你需要對你的.h像@property
:
@property (nonatomic, strong) NSString *aString;
和您的m內,您檢索此@property
:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"%@", _aString);
}
這是一個NSString的例子,但你可以傳遞任何對象克拉。
謝謝喬丹,upvoted。所有的答案都是信息,但我正在尋找這樣的事情,所以我會接受這個答案。謝謝。 – Nactus
不客氣:) –
您可以使用弱分配集合了循環引用的對象之一:
ObjectA.h
@class ObjectB
@interface ObjectA
@property (strong) ObjectB *parent;
@end
ObjectA.m
#import "ObjectA.h"
#import "ObjectB.h"
@implementation ObjectA
// methods
@end
ObjectB.h
@class ObjectA
@interface ObjectB
@property (weak) ObjectA *child;
@end
ObjectB.m
#import "ObjectB.h"
#import "ObjectA.h"
@implementation ObjectB
// methods
@end
創建自定義委託並將消息從一個類發送到另一個類。因此,行爲將是一個類將是發件人和其他將收到。僅供參考遵循此: -
我不認爲這是一個良好的編程風格,但你可以使用單對許多不同類別的
就像那個之間共享數據: Singleton.h
@interface Settings : NSObject
@property (nonatomic) NSString *mySharedString;
+ (Settings *)my;
- (id)init;
@end
Singleton.m
#import "Settings.h"
@implementation Settings
@synthesize mySharedString
static Settings *my = nil;
+ (Settings *)my
{
if (!my)
my = [Settings new];
return my;
}
- (id)init
{
self = [super init];
if (self){
//do some code
}
return self
}
@end
然後在任何類,你可以這樣說
NSString *classString = [Settings my].mySharedString
我想你已經明白了倒退。父母應該知道這個孩子。孩子不需要知道其父母。
家長可以有一個強烈的參考其孩子。 (ex)
//inside the parent class
@property (nonatomic, strong) id childObject;
小孩通常不會明確知道它的「父母」是什麼,但它對代表的參照很弱。該委託可以是特定類型的類,也可以是符合特定協議的類型爲id
的泛型類。(EX)
//inside the child class
@property (nonatomic, weak) id<SomeProtocol> delegate;
您負責在視圖控制器之間傳遞數據。您可以使用-parentViewController
或-childViewControllers
,還可以使用weak
引用進行循環引用。
如果您使用的故事板,也許這將是看看-performSegueWithIdentifier:sender:
一個好主意。發送者可以用來在視圖控制器之間傳遞數據。
此外,如果你使用的是故事板,有時- instantiateViewControllerWithIdentifier:
是很方便的事情。
有多種方法可以做到這一點。
要將數據從A傳遞給B,您可以輕鬆使用'property'。要訪問從B到A的數據,你可以看一下'protocol'。 告訴我們,如果你使用故事板或不使用屬性 –
通過數據你是什麼意思的「親子關係」? – dasblinkenlight
@JordanMontel,現在我只是試圖將兩個變量從A傳遞給B.我明白從B到A我需要使用協議。但我很難理解誰需要這些屬性。 B能夠訪問A的屬性,反之亦然? – Nactus