我是iOS开发的新手,有点迷失。我的问题是关于一般用户体验和具体架构建议。
基本上我的应用程序应该如下工作:
首先启动它从远程服务器请求信息,用GPS请求用户位置。当这些事情发生时,app应该显示某种带有进度指示器和文本的首次启动视图。第一个问题是:如果用户无法从远程服务器下载信息怎么办?这些信息是必不可少的,没有它,应用程序就无法继续工作。我应该重试下载吗?我应该向用户提供一些MessageBox吗?使用桌面应用程序,我会向用户提供两种选择 - 重试或退出。在iOS应用程序中退出是不可接受的,所以我应该提供消息框吗?或者我只需要在第一次启动视图中通过文本通知用户有关问题,然后静默重试下载信息,直到成功为止?或创建按钮“重试”并让用户这样做?
如果设备提供的用户位置和下载成功,我需要继续所有信息。否则用户必须在继续之前选择他的国家和城市。
然后我有3个不同功能的标签。我已经实现了。
所以我的问题是:如何显示首次加载视图及其控制器?我应该检查appdelegate初始化方法并将首次加载视图指定为主视图,然后重新分配给通常的应用程序UITabbarController(不知道该怎么做)?或者我需要将UITabbarController设置为根控制器并在初始化时在第一个选项卡控制器中我应该检查它是否是第一次启动并为第一次查看控制器调用presentViewController之类的东西?我想在其他地方实现这个检查,appdelegate是个好地方,因为初始化代码并不真正属于第一个标签控制器。
我创建了具有多个视图的示例程序,这些视图由UITabbarController或UINavigationController管理,但我不了解如何自己管理多个视图,没有帮助控制器,这对我有用。
答案 0 :(得分:1)
创建一个视图控制器,在加载数据时显示presentViewController:animated:completion:
,并将其显示在根视图控制器的viewDidLoad
中。
我使用AFNetworking之类的东西从服务器进行加载。
NSURL *url = [NSURL URLWithString:@"https://your-url.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
// Dismiss the loading view controller and proceed as normal
} failure:^( AFHTTPRequestOperation *operation , NSError *error ) {
// Display an alertView that gives the option to retry
}];
[operation start];
确保在dispatch_async(dispatch_get_main_queue(), ^{});
调用中将块中的任何UI更新包装在主线程上进行更新。
答案 1 :(得分:1)
我目前正在开发一款行为相似的应用。
我使用UINavigationController作为根控制器。之后,我有一个带有UIActivityIndicatorView的视图控制器。我在ViewWillAppear方法中启动动画,并在ViewDidAppear方法中调用实现远程调用的方法。
如果通话成功,我会转到下一个视图。
如果呼叫失败,我使用UIAlertView通知用户,然后点击“确定”重试。