如何将数组的值从第一个视图传递到xcode中的第四个视图?

时间:2012-06-02 13:19:42

标签: objective-c xcode uitableview xml-parsing nsarray

我的应用程序中有4个视图 发布年份>书籍>作者>作者desc

我以这种格式通过xml获取此数据。

那么如何根据选择的书和选择的作者传递作者desc中的信息? 我创建了一个对象名称"结果"包含这个解析元素的所有细节。解析完成。 但是,根据从一个视图到第三个视图中选择的行,我无法显示和传输信息。

3 个答案:

答案 0 :(得分:1)

在didSelectRowAtIndexPath中,当您创建新视图控制器以推入屏幕时(假设您使用的是uinavigationcontroller堆栈,听起来像你),然后将“result”设置为新控制器上的属性

我猜你的viewcontrollers的名字,我也使用通用指针类型“id”作为结果,如果你愿意,你可以用特定的结果类替换它。

YearPublishedViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    BooksListViewController *booksVC = [[BooksListViewController alloc] initWithNibName:@"BooksListViewController" bundle:nil];
    booksVC.result = self.result;
}

BooksListViewController.h

#import <UIKit/UIKit.h>
@interface BooksListViewController : UITableViewController
@property (nonatomic, retain) id result;

BooksListViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    AuthorListViewController *authorVC = [[AuthorListViewController alloc] initWithNibName:@"AuthorListViewController" bundle:nil];
    authorVC.result = self.result;
}

AuthorListViewController.h

#import <UIKit/UIKit.h>
@interface AuthorListViewController : UITableViewController
@property (nonatomic, retain) id result;

AuthorListViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    AuthorDescriptionViewController *authorDescVC = [[AuthorDescriptionViewController alloc] initWithNibName:@"AuthorDescriptionViewController" bundle:nil];
    authorDescVC.result = self.result;
}

AuthorDescriptionViewController.h

#import <UIKit/UIKit.h>
@interface AuthorDescriptionViewController : UIViewController
@property (nonatomic, retain) id result;

AuthorDescriptionViewController.m

//use self.result wherever you need it here

还要确保在每个控制器的dealloc中释放“结果”以进行正确的内存管理。

答案 1 :(得分:1)

在对象之间发送消息和值有几种常用的实践和模式:

  1. 如果您需要按创建顺序将消息和/或值传递给对象,请使用 assignment straight call 。除了 @obuseme 已经写好了。

  2. 如果您需要按照创建的向后顺序将消息和/或值传递给对象,请使用 delegation 。 “按向后顺序”我的意思是所有者创建其子对象并等待它的一些回调。

  3. 还有一个名为 singleton 的模式。您可以使用它从任何对象访问它。

答案 2 :(得分:0)

Inoder将数组的值从第1个视图传递到第4个视图,然后将值从View1传递到View2,然后从那里传递给View3,然后从那里传递给View4。这种标准的传递价值的方式根据苹果的指导