iPhone: возвращение ценности из представлений - PullRequest
2 голосов
/ 20 января 2010

В представлении AI откройте представление B, содержащее категории в uitableview, когда я выбираю категорию, я открываю представление C, которое содержит подкатегории для категории (используя постоянство CoreData) в uitableview, когда я выбираю подкатегорию I Откройте представление D, в котором содержится весь мой продукт (с использованием персистентности CoreData), когда я выбираю продукт, как я могу установить значение в представлении A? Как избежать утечек, конечно ...

A (MainWindow) -> B (UITableView с категорией) -> C (UITableView с подкатегорией) -> D (UITableView с продуктами) D-> C (с выбранным продуктом) -> B (с выбранным продуктом) -> A (с выбранным продуктом)

Надеюсь, я достаточно низкоустойчив: D

Спасибо

Ответы [ 3 ]

1 голос
/ 20 января 2010

В этом подходе предполагается, что вы используете 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* здесь. Вы можете использовать любой класс, который вам нравится.

0 голосов
/ 20 января 2010

Один из способов - передать указатель на viewA вниз на viewD через все остальные представления (контроллеры?)

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


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

Другим способом может быть сделать viewA синглтоном и создать его в любом месте, где вам нужно его использовать. Здесь есть хорошие примеры синглетонов Obj-C на SO.

Береги себя, Marius

пс .: надеюсь, я понял вашу проблему не совсем неправильно;)

0 голосов
/ 20 января 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...