如何在第二个UIViewcontroller中使用第一个ViewController的parse元素?

时间:2012-01-23 15:28:39

标签: iphone uiviewcontroller ios5 uitableview

在我的应用中,我将GET发送到我的服务器并收到一些回复。我有来自我的主视图控制器类的TavleView和TableViewController类。我在我的主ViewController中进行解析,我想用我从第一个ViewController收到的结果填充TableViewCells。此外,我还希望在名为ViewController的新DetailViewController中显示任何单元格的详细信息。现在,视图中的任何导航都像我想要的那样......

3 个答案:

答案 0 :(得分:2)

根据您在上述评论中的请求,@ilhançetin是对我提出的解决方案的更深层次的解释。

首先,如果您不知道什么是碎片数据模型,共享数据模型是我们在项目中定义的类,我们创建它的static实例。由于该实例是static,这意味着它始终存在于我们所有的类中。我们使用此静态实例在项目中的不同类之间共享信息,就像您在问题中需要的那样。例如,如果您认为需要将类的字符串值发送到类,则可以在共享实例中放入NSString成员。以下是我们如何执行共享实例:

.h文件(假设我的班级名为MyDataModel):

#import <Foundation/Foundation.h>

@interface MyDataModel : NSObject
{
    NSString *stringToBeShared;
}

@property (nonatomic, retain) NSString *stringToBeShared;

+ (MyDataModel *) sharedInstance;

@end

在.m文件中:

#import "MyDataModel.h"

@implementation MyDataModel

@synthesize stringToBeShared;

static MyDataModel *_sharedInstance;

+ (MyDataModel *) sharedInstance
{
    if(!_sharedInstance)
    {
        _sharedInstance = [[MyDataModel alloc] init];
    }
    return _sharedInstance;
}

@end

从现在开始,在我们的程序中,在我们需要访问此共享字符串的任何类中,我们将#import "MyDataModel.h"并通过以下方式访问字符串:[MyDataModel sharedInstance].stringToBeShared。现在我们已经准备好了共享机制,我们将继续查看如何在另一个视图中填充表。

在您的代码中有一条评论如下:

//i want to populate TableViewCells with the messID and the details of each cell(push in new view controller) will contain 'content' above

您要求此行中有两件事,但在此部分代码中只能完成一件事。我们现在将填充表格,当您点击一行时,我们将推送您想要的详细信息。

为了能够填充表格,我们需要一个能够在表格所在的同一个类中执行此操作的函数。我们将其命名为populateTable。那么当我们在不同的班级时,我们如何能够调用此函数?我们将向谁发送messID值?要发送messID,我们将使用共享实例,因此您将添加保存messID值所需的内容。现在致电populateTable我们将使用通知中心(我在上一个回答中描述)。

通知中心是一种用于调用不同类中的函数的机制。因此,在包含populateTable的类中,您将在viewDidLoad中为其添加一个侦听器,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(populateTable) name:@"DoPopulateTable" object:nil];

我们将使用字符串@"DoPopulateTable"来调用此侦听器。现在在你的循环中你将做两件事:

  1. messID存储在您的共享实例
  2. 使用:populateTable
  3. 致电[[NSNotificationCenter defaultCenter] postNotificationName:@"DoPopulateTable" object:nil userInfo:nil];

    通过这个你已经按照你的要求填充了你的桌子。我们错过了什么吗?是的,您将在稍后推送的完整数据。如果数据很重要并且在关闭设备后需要,则必须将其存储在sqlite3数据库中。如果没有(我将演示不!)你可以将信息存储在NSMutableDictionary内,其中这个字典的键是messID(当你点击表格时能够检索它们),并且表的值是NSArray s,其中每个数组都包含您需要的所有信息。

    现在,当您想要在包含表格的视图中推送信息时,可以使用[yourArrayName objectAtIndex:theIndexYouWant]调用数组中的每个元素。

    我希望这可以帮助你,并且记住,根本没有头痛;)

答案 1 :(得分:1)

去看看WWDC 2011的播客WWDC 2011 - Session 309 - Introducing Interface Builder Storyboarding

我相信这是正确的视频,它将说明您正在寻找的内容。他们改进了UITableView,并在ios5的IB故事板中添加了许多功能。它将有助于演示如何在一个View Controller中获取数据并在第二个UIViewtable Controller中显示它。

答案 2 :(得分:1)

我会阅读上面评论中提供的代码,但与此同时我认为link可以为您提供很多帮助。这是一种在视图之间发送信息的方法,因此您可以在一个视图中解析数据,并使用此技术轻松地将它们发送到另一个视图中。