草庐IT

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

coder 2023-09-22 原文

我是 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/

有关ios - 模型和 Controller 之间的通信 - iOS的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  8. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  9. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  10. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

随机推荐