构建一个基本的应用程序iOS应用程序-单一视图-最佳实践



我目前正在开发一个单视图应用程序,它可以执行以下操作:

  1. 使用CoreLocation抓取用户位置
  2. 将其lon/lat发送到API
  3. 以JSON形式返回潮汐数据
  4. 深入JSON中的对象和键以返回:水位、位置等,并通过文本标签显示它们

我已经完成了大部分工作,但它更像是被viewDidLoad塞满了——我正在努力寻找组织这样的事情的最佳方式。我会把它分成不同的方法吗,比如:

  • setTideData
  • 显示TideData

或者它会比这更崩溃吗?(是的,我相信这也取决于细节)。我可能会在视图上显示8-10个不同的统计数据。

之类的东西

  • viewDidLoad上,我是获取用户位置,还是在viewDidPear等上先获取用户位置
  • 然后我会在viewDidLoad中调用displayTideData方法吗

我只是在寻找某种类型的一般最佳实践,试图扫描一些项目,但什么都不是我想要的。

编辑:这是我返回数据的一个例子——https://gist.github.com/ryancoughlin/8043604

有什么想法吗?

感谢

这在很大程度上是一个偏好和风格的问题,但您可以通过将某些部分划分为自己的类来简化逻辑,例如:

  • 您可以使用类似JSON模型的东西将数据反序列化为一个类,并以更方便的方式访问它
  • 加载数据和反序列化可以在另一个类中处理,该类只返回具有所需数据的对象
  • 等等

如果不直接查看代码,很难给出更好的建议,但这应该会给你一些如何简化的建议。

编辑:如何将反序列化和数据处理分离为自定义对象的代码示例:

- (id)initWithJSON:(NSDictionary *)JSON
{
self = [super init];
if (self) {
self.gender = [JSON objectForKey:@"gender"];
self.email = [JSON objectForKey:@"email"];
self.firstName = [JSON objectForKey:@"first_name"];
self.lastName = [JSON objectForKey:@"last_name"];
self.personId = [[JSON objectForKey:@"person_id"] integerValue];
}
return self;
}

然后,您只需创建一个包含以下数据的对象:

Person *person = [[Person alloc] initWithJSON:JSON];

只需以更干净的方式访问您需要的任何数据:

self.myLabel.text = [NSString stringWithFormat:@"Name: %@", person.firstName];

听起来你有一个Massive View Controller,这是一件坏事。试着重组你的代码,这样你就有了一个胖模型和一个瘦控制器。控制器应该只负责创建和刷新视图、引导模型以及基于用户交互更新模型。一些可能的模型对象:

  • 正在从服务器获取数据
  • 用于将JSON对象转换为类型化对象的解析器(从而封装JSON结构的知识)
  • 视图控制器的一个简单接口(例如一个对象),用于从中提取数据和向中推送数据

您的模型应该包含应用程序的所有业务逻辑。

相关内容

最新更新