ios - 模型和 Controller 之间的通信 - iOS

标签 ios model-view-controller rest nsnotificationcenter

我是 iOS 开发的新手,所以我希望得到一些反馈。

我正在尝试为我的网络服务构建一个 iOS 客户端。到目前为止,这是我所做的:

我正在实现两个 View (使用 Storyboard 的基于实用程序的应用程序)。在主视图中,我使用了一个文本字段和一个搜索按钮,用户可以在其中输入查询,然后单击搜索按钮。单击搜索按钮后,我的目的是读取文本字段的值,并在我对 Web 服务的 Restful 调用中使用它。我的 Web 服务使用包含查询结果的 JSON 文件回复,我对其进行解析并显示到辅助 View 的文本区域。

我知道如何在 iOS 中进行 restful 调用,以及如何进行 JSON 解析以及在屏幕上显示结果(至少是文本内容,但这是另一个不同的问题)。但我的目的是学习 MVC 基础知识并将其应用到我的应用程序中。

根据MVC, Controller 更新 View ,模型发出一个通知广播, Controller 可以监听并知道对象是否有任何变化。所以这就是我最想做的事情:

我的模型 - 我的模型将处理核心 RESTful 调用、获取 JSON 回复、解析它并获取我想要在 View 上显示的结果值。

我的 Controller - 我希望我的 Controller 监听我的模型并从模型获取结果值并将它们显示在 View 上。

使用一种快速而肮脏的方式,我可以实现 RESTful 调用、JSON 解析和显示结果值 - 所有这些都在 Controller 中进行,但是使用这种技术,如果明天我的 View 发生变化,那么我必须重新编写代码。或者,如果我想添加新功能,则必须更换 Controller 。所以理想情况下,我希望有一个不知道 View 是什么样子的核心 Model,让 Controller 从 Model 获取结果并将它们显示在 View 上。

根据我目前从 Google 搜索结果中读到的内容,有两种方法可以做到这一点:a) 关键值观察和 b) 通知中心。

在过去的 2 天里,我试图找到一个很好的体面的方式来实现通知中心或阅读更多关于它的信息,但我没有得到很好的领导。我的一些问题是,我可以使用 Controller 接收的通知中心发送字符串结果值吗?通知中心如何真正处理字符串值?我在哪里可以找到一些好的例子?

因此,我们将不胜感激任何与此相关的帮助。

最佳答案

Some of the questions I have is, can I send out the String results value using Notification center that my controller picks up?

是的,这通常会使用 NSNotificationuserInfo 属性来完成。 userInfo 是一个普通的 NSDictionary,它可能包含 NSObject 派生对象的实例,这些对象由遵守 NSCopying 的键索引协议(protocol)(通常使用 NSString)。请注意,字典 (userInfo) 将保留您的参数对象。


How does Notification Center really work with string values?

好吧,这取决于您希望它如何工作。但撇开吹毛求疵不谈,请看下文。


Where can I find some good examples?

也许这个有帮助...


示例

接收者( Controller )注册通知:

- (void)registerForNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(modelObjectUpdatedString:)
                                                 name:@"StringUpdated"
                                               object:nil];
}

发送者(模型)通知世界:

- (void)stringUpdateWith:(NSString *)theString
{
    self.string = theString;
    [[[NSNotificationCenter defaultCenter] postNotificationName:@"StringUpdated" 
                                                         object:self 
                                                       userInfo:[NSDictionary dictionaryWithObjectsAndKeys:self.string, @"String", nil]];
}

接收器( Controller )在其处理程序中接收通知:

- (void)modelObjectUpdatedString:(NSNotification *)notification
{
    ModelObject *postingObject = [notification object];
    NSString *string = [[notification userInfo]
        objectForKey:@"String"];
    ...
}

关于ios - 模型和 Controller 之间的通信 - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166975/

相关文章:

json - 使用 JSON/HTTP/REST 接口(interface)查询 MongoDB

c# - C#中如何获取请求

ios - 无法滚动到 UITableView 中索引路径处的行

ios - 如何绘制不隐藏填充文本的 UILabel?

ios - 在模态视图上调用 present——没有显示,尽管调试输出显示它们确实加载了

php - 在 PHP 中为 MVC Controller 合并 INSERT Mysql 查询

python - Python 中包含单项组的应用程序布局

objective-c - 我们可以从线程(NSThread)调用异步 NSURLRequest 吗?

c# - 每当更新数据库中的字段时调用外部 API

api - 有谁知道 FreeSWITCH 的 RESTful API 吗?