1

我是 iOS 开发的新手,有点迷茫。我的问题是关于一般用户体验和具体的架构建议。

基本上我的应用程序应该如下工作:

首次启动时,它向远程服务器请求信息,通过 GPS 请求用户位置。当这些事情发生时,应用程序应该显示某种带有进度指示器和文本的首次启动视图。第一个问题是:如果用户无法从远程服务器下载信息怎么办?此信息是必不可少的,没有它,应用程序将无法继续工作。我应该重试下载吗?我应该向用户展示一些 MessageBox 吗?对于桌面应用程序,我会为用户提供两种选择——重试或退出。退出在 iOS 应用程序中是不可接受的,所以我应该显示消息框吗?或者我只需要通过首次启动视图上的文本通知用户问题,然后静默重试下载信息,直到成功?或者创建按钮“重试”并让用户这样做?

如果设备提供了用户位置并且下载成功,则我拥有继续所需的所有信息。否则用户必须选择他的国家和城市才能继续。

然后我有 3 个具有不同功能的选项卡。我已经实现了。

所以我的问题是:如何显示首次加载视图及其控制器?我是否应该检查 appdelegate 初始化方法并将首次加载视图分配为主视图,然后重新分配给通常的应用程序 UITabbarController(不知道该怎么做)?或者我需要将 UITabbarController 设置为根控制器,并在初始化的第一个选项卡控制器中检查它是否是首次启动并为首次视图控制器调用类似 presentViewController 的东西?我想在其他地方实现这个检查,appdelegate 是个好地方,因为初始化代码并不真正属于第一个选项卡控制器。

我创建了具有多个视图的示例程序,这些视图由 UITabbarController 或 UINavigationController 管理,但我不明白如何自己管理多个视图,没有帮助控制器为我工作。

4

2 回答 2

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 更新包装在块中,以使更新发生在主线程上。

于 2013-04-01T18:48:06.350 回答
1

我目前正在开发具有类似行为的应用程序。

我使用 UINavigationController 作为根控制器。之后,我有一个带有 UIActivityIndi​​catorView 的视图控制器。我在 ViewWillAppear 方法中启动动画,在 ViewDidAppear 方法中调用实现远程调用的方法。

如果调用成功,我转到下一个视图。

如果调用失败,我会使用 UIAlertView 通知用户,然后他们点击 OK 重试。

于 2013-04-01T19:05:21.807 回答