iphone - 方法调用乱序?

标签 iphone objective-c ios

我有以下代码:

    [self.view bringSubviewToFront:loggingIn];
    [self loginWithUsername:user Password:pw];

这是在按钮按下的 IBAction 方法中。该按钮保持突出显示,直到用户登录(这可能需要几秒钟),然后 View 出现。为什么在调用登录方法之前 View 没有出现?

最佳答案

约翰的回答会起作用,但它与运行循环有关,而不是阻塞线程。基本上,每当您的应用程序接收到诸如单击按钮之类的事件时,您的处理程序就会在主线程中运行。您对 UI 所做的任何更改都会在处理程序完成后发生。这让 Cocoa 通过一起分析/执行它们来优化图形更新。

Run Loop:
  Event -> Your Handler Code -> System Updates UI

因此,在调用 loginWithUsername:Password: [sic] 方法之前,您需要让处理程序代码完成以让系统开始更新 UI。调度一个定时器会将它撞到运行循环的下一次迭代(定时器关闭成为触发下一个循环的“事件”)。所以,
Run Loop (2 iterations):
  Mouse Click -> Your Handler Code (reorder views) -> System reorders views
  Timer Fires -> Your Handler Code (trigger login) -> Any addl UI updates

所以做这样的事情:
- (void) buttonHandler: (id)sender {
    [self.view bringSubviewToFront:loggingIn];
    [self performSelector: @selector(performLogin)
               withObject: [NSArray arrayWithObjects:user, pw, nil]
               afterDelay: 0];
}

- (void) performLogin: (NSArray *)args {
    [self loginWithUsername:[args objectAtIndex:0] Password:[args objectAtIndex:1]];
}

它不必是一个数组。您还可以将您的用户名和密码打包在字典中,并将其用作您的参数。

关于iphone - 方法调用乱序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201463/

相关文章:

ios - 创建 NSManagedObject 类时,使用 Coredata 的项目中出现 Apple Mach-O 链接器错误

ios - SKMaps.框架 : code object is not signed at all

iphone - 在应用程序运行时阻止 Iphone 中的调用

ios - 使用 FacebookSDK 在 Facebook 上仅共享文本的问题

objective-c - 未读消息总数 quickblox

iphone - 如何在加载了 HTMLString :baseURL:? 的 UIWebView 中提交表单

ios - 如何引用 UIImageView (Xcode iOS)

iphone - UIView 内部的 UIScrollView

iphone - 是否可以在 iPhone 应用程序中记录 HTTP 连接?

ios - 强,弱或无主引用周期与定时器