在我的应用中,我将GET
发送到我的服务器并收到一些回复。我有来自我的主视图控制器类的TavleView和TableViewController类。我在我的主ViewController中进行解析,我想用我从第一个ViewController收到的结果填充TableViewCells。此外,我还希望在名为ViewController
的新DetailViewController
中显示任何单元格的详细信息。现在,视图中的任何导航都像我想要的那样......
答案 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"
来调用此侦听器。现在在你的循环中你将做两件事:
messID
存储在您的共享实例populateTable
[[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可以为您提供很多帮助。这是一种在视图之间发送信息的方法,因此您可以在一个视图中解析数据,并使用此技术轻松地将它们发送到另一个视图中。