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

时间:2013-12-19 14:35:38

标签: ios iphone objective-c json

我目前正在开发一个执行以下操作的单一视图应用:

  1. 使用CoreLocation抓取用户位置
  2. 将他们的lon / lat发送到API
  3. 将潮汐数据作为JSON
  4. 返回
  5. 潜入JSON中的对象和键以返回:潮位,位置等,并通过文本标签显示它们。
  6. 我的大部分工作都在工作,但它更加沉浸在viewDidLoad中 - 我正在努力寻找组织这样的事情的最好方法。我会将其分解为不同的方法,例如:

    • setTideData
    • displayTideData

    还是会比这更糟糕? (是的,我确定这一切都取决于细节)。我会在视图上显示8-10个不同的统计数据。

    这样的事情
    • viewDidLoad我是否抓住用户位置或先在viewDidAppear上执行此操作
    • 然后我会在viewDidLoad
    • 中调用我的displayTideData方法

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

    编辑:以下是我返回的数据示例 - https://gist.github.com/ryancoughlin/8043604

    有什么想法吗?

    由于

2 个答案:

答案 0 :(得分:1)

这几乎是偏好和风格的问题,但你可以通过将某些部分分成他们自己的类来以多种方式简化你的逻辑,例如:

  • 您可以使用类似JSON model的内容将数据反序列化为类,并以更方便的方式访问它
  • 加载数据和反序列化可以在另一个类中处理,该类只返回包含所需数据的对象

如果不直接查看代码,很难提供更好的建议,但这应该会为您提供一些如何简化操作的建议。

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

- (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];

答案 1 :(得分:0)

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

  • 从服务器获取数据。
  • 用于将JSON对象转换为类型对象的解析器(从而封装了JSON结构的知识)。
  • 一个简单的界面(例如一个对象),供视图控制器从中提取数据并将数据推送到。

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

相关问题