我目前正在开发一个单视图应用程序,它可以执行以下操作:
- 使用CoreLocation抓取用户位置
- 将其lon/lat发送到API
- 以JSON形式返回潮汐数据
- 深入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结构的知识)
- 视图控制器的一个简单接口(例如一个对象),用于从中提取数据和向中推送数据
您的模型应该包含应用程序的所有业务逻辑。