gpt4 book ai didi

ios - 我应该在哪里准备数据?在 awakeFromNib、viewDidLoad 或其他东西中

转载 作者:行者123 更新时间:2023-11-28 22:19:46 26 4
gpt4 key购买 nike

我对 iOS 编程还是比较陌生。这里有一个困惑我很久的问题。

因此,在其中一个 View Controller 中,在将此 View Controller 插入导航项之前,我在 prepareForSegue 中将一个参数(比如 userId)传递给它,来自前一个 View Controller 。当这个 View Controller 根据来自前一个 View Controller 的 userId 加载(初始化)时,我正在进行网络调用以获取与该用户相关的信息列表,然后将这些信息填充到当前 View Controller 的模型。

我应该把这个数据准备的逻辑放在哪里?

最佳答案

使用 viewDidLoad: 应该适合普通的 Storyboard使用,因为 Storyboard不会重用 View Controller 。无论如何,为了我的 View Controller 使用场景的完整性,我倾向于使用这种模式:

  • 开始在viewWillAppear:中异步加载远程数据
  • 停止在 viewWillDisappear: 中加载远程数据

这确保您的数据将始终更新为当前 userId,因为 ID 可能在 viewDidLoad 之后更改,例如如果在设置 userId 之前重用 View Controller 或访问 .view 属性。

您还应该跟踪您的数据是否已加载。例如,您可以创建一个名为 _isDataLoaded 的私有(private) bool 字段,在完成加载数据时将其设置为 true,在取消加载时将其设置为 false数据或设置新的 userId

总结一下,我的想法中的模式应该是这样的:

@interface UserViewControler : UIViewController {
bool _isDataLoaded;
NSURLConnection _dataConnection;
}

@implementation UserViewController

-(void) setUserId:(int)userId {
if (_userId != userId) {
_userId = userId;
_isDataLoaded = false;
}
}

-(void) viewWillAppear:(BOOL)animated {
if (!_isDataLoaded) {
_dataConnection = // init data connection here
_dataConnection.delegate = self;
[_dataConnection start];
}
}

-(void) viewWillDisappear:(BOOL)animated {
if (_dataConnection) {
[_dataConnection cancel];
_dataConnection = nil;
_isDataLoaded = false;
}
}

// NSURLConnection call this when finish
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
_isDataLoaded = true;
_dataConnection = nil;
}

// NSURLConnection call this when fail to load data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
_isDataLoaded = false;
_dataConnection = nil;
}

这取决于您使用什么框架从远程服务器检索数据,但模式应该是这样的。这将确保:

  • 您将仅在 View 出现时加载数据。
  • View Controller 在消失后不会加载更多数据。
  • 如果userId相同,则不会再次下载数据。
  • 支持 View Controller 重用。

关于ios - 我应该在哪里准备数据?在 awakeFromNib、viewDidLoad 或其他东西中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20735103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com