【问题标题】:How to pause, not stop an app/program in Swift?如何在 Swift 中暂停而不是停止应用程序/程序?
【发布时间】:2014-12-18 22:48:05
【问题描述】:

好吧,这个问题甚至让我的计算机科学老师感到难以置信,因为我们认为没有任何效果。

下面是我的代码。因为我正在从 Parse 中检索数据,所以在实际获取该数据时会有一点延迟。并且计算机就是计算机,即使 Parse 数据没有被检索到,应用程序也会继续执行代码。

我想要做的就是告诉我的应用程序停止执行代码,例如 5 秒,然后再继续(这应该允许 Parse 数据被检索并赶上程序)。

我尝试使用sleep (time) 函数,但它只是在估算的时间内停止整个程序(因此从 Parse 中检索数据也被暂停)。此外,放入一个无用的 for 循环也会做同样的事情。

我问这个的原因是因为我在打印test1 时得到一个 nil 值。

另外,看起来“没有结果”正在打印,这意味着我获取核心数据的内容有问题......

import UIKit
import Darwin
import CoreData

class RegisterEmail: UIViewController {

var test1: Bool?
var userID: String!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
    if identifier == "passEmail" {


        var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

        var context:NSManagedObjectContext = appDel.managedObjectContext!

        var request = NSFetchRequest(entityName: "Users")

        request.returnsObjectsAsFaults = false

        var results: NSArray = context.executeFetchRequest(request, error: nil)!

        if(results.count > 0)
        {
            var res = results [0] as NSManagedObject

            userID = res.valueForKey("userID") as String

        }

        var query = PFUser.query()
        query.getObjectInBackgroundWithId(userID) {
            (User: PFObject!, error: NSError!) -> Void in
            if error == nil {
                //NSLog("%@", User)


                var checkEmail = User["emailVerified"] as Bool

                println(checkEmail)

                var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

                var context:NSManagedObjectContext = appDel.managedObjectContext!         

                var newEmail = NSEntityDescription.insertNewObjectForEntityForName("Email", inManagedObjectContext: context) as NSManagedObject

                newEmail.setValue(checkEmail, forKey: "emailStatus")

                context.save(nil)

            } else {
                NSLog("%@", error)
            }


        }


        var appDel1:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

        var context1:NSManagedObjectContext = appDel1.managedObjectContext!

        var request1 = NSFetchRequest(entityName: "Email")

        request1.returnsObjectsAsFaults = false

        var results1: NSArray = context1.executeFetchRequest(request1, error: nil)!

        if(results1.count > 0)
        {
            var res1 = results1 [0] as NSManagedObject

            test1 = res1.valueForKey("emailVerified") as Bool
        }

        else
        {
            println("No results")
        }

        println (test1) //NIL VALUE


        if (test1 == false) {

            let alert = UIAlertView()
            alert.title = "Error"
            alert.message = "The email you have provided has not been verified."
            alert.addButtonWithTitle("Dismiss")
            alert.show()

            return false
        }

        else {

            return true
        }
    }

    // by default, transition
    return true
}
}

【问题讨论】:

    标签: core-data swift parse-platform


    【解决方案1】:

    可以使用任意延迟时间来实现

    -(void)performSelector: withObject: afterDelay:   (NSObject)
    

    但这无论如何都不是最有效的方法。因为获取数据可能一次只需要一秒钟,而另一次可能需要几秒钟,或者永远不会。相反,您最好查看用于将数据推送到打印的完成块。

    【讨论】:

    • 实际上,我可能发现了我真正的问题:看起来“没有结果”正在打印,这意味着我获取核心数据的内容有问题。我真的从另一个视图控制器复制了获取代码,所以我看不出哪里出错了......
    • 其实你能不能把你在swift中给我的代码提供给我?
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多