从视图AI打开视图B,其中包含uitableview中的类别,当我选择一个类别时,我打开视图C,其中包含类别的子类别(使用CoreData持久性)在uitableview中,当我选择一个子类别时打开包含我所有产品的视图D(使用CoreData持久性),当我选择产品时,如何将值设置到视图A?当然要避免泄漏...
A(MainWindow) - > B(带类别的UITableView) - > C(带子类别的UITableView) - > D(带产品的UITableView) D-> C(具有所选产物) - > B(具有所选产物) - > A(具有所选产物)
我希望我足够明白:D
谢谢
答案 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)
以下是两个包含与您的问题相关的信息的资源:
iPhone SDK - pass data from AppDelegate to a rootviewcontroller
答案 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。:希望我的问题不是完全错误的;)