iPhone:从视图中获取值

时间:2010-01-20 14:08:59

标签: iphone objective-c

从视图AI打开视图B,其中包含uitableview中的类别,当我选择一个类别时,我打开视图C,其中包含类别的子类别(使用CoreData持久性)在uitableview中,当我选择一个子类别时打开包含我所有产品的视图D(使用CoreData持久性),当我选择产品时,如何将值设置到视图A?当然要避免泄漏...

A(MainWindow) - > B(带类别的UITableView) - > C(带子类别的UITableView) - > D(带产品的UITableView) D-> C(具有所选产物) - > B(具有所选产物) - > A(具有所选产物)

我希望我足够明白:D

谢谢

3 个答案:

答案 0 :(得分:1)

此方法假设您使用的UINavigationController具有一堆UIViewController个实例,每个实例都有一个托管对象上下文实例作为Core Data应用程序的一部分。

在您的应用程序委托标头中设置ivar@property,其中包含所选产品的值(例如NSManagedObjectID*):

NSManagedObjectID *selectedProduct;
...
@property (nonatomic, retain) NSManagedObjectID *selectedProduct;

在实施中合成此ivar,并在-dealloc中发布:

@synthesize selectedProduct;
...
- (void) dealloc {
    [selectedProduct release], selectedProduct = nil;
    ...
}

在保留常量的位置或每个视图控制器标题中设置以下宏:

#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)

此后,您可以在任何视图控制器中设置和访问selectedProduct值,例如:

NSManagedObject *foo;

// set the property
[UIAppDelegate setSelectedProduct:[foo objectID]]; 

// access the property
foo = [self.managedObjectContext objectWithID:[UIAppDelegate selectedProduct]]; 

您不一定要在这里使用NSManagedObjectID*。你可以使用你喜欢的任何课程。

答案 1 :(得分:0)

答案 2 :(得分:0)

一种方法是通过所有其他视图(控制器?)将指针传递给viewA向下看到视图?

// e.g inside ViewB
...
ViewC *viewC = [[ViewC alloc] initWithFrame: myFrame andMainView: viewA];


// inside ViewD finally
...
[viewA setProductImageWithID: self.selctedProduct.id];

另一种方法可能是使viewA成为单例并在需要使用它的任何地方实例化它。在这里有关于Obj-C单身人士的好例子。

保重, 的Marius

ps。:希望我的问题不是完全错误的;)