Core data 如何在Swift中暂停而不是停止应用程序/程序?
好吧,这个问题甚至让我的计算机科学老师感到困惑,因为我们所想的都不管用 下面是我的代码。因为我正在从Parse中检索数据,所以在实际获取数据时会有一点延迟。计算机就是计算机,即使解析数据没有被检索到,应用程序也会继续执行代码 我所要做的就是告诉我的应用程序停止执行代码,比如说5秒钟,然后再继续,这应该允许检索解析数据并赶上程序 我尝试过使用sleep time函数,但它只是在插补的时间内停止整个程序,因此从Parse中检索数据也被搁置。同样,加入一个无用的for循环也会做同样的事情 我之所以问这个问题,是因为我在打印test1时得到了一个nil值 而且,看起来没有打印任何结果,这意味着我获取核心数据时出现了问题Core data 如何在Swift中暂停而不是停止应用程序/程序?,core-data,swift,parse-platform,Core Data,Swift,Parse Platform,好吧,这个问题甚至让我的计算机科学老师感到困惑,因为我们所想的都不管用 下面是我的代码。因为我正在从Parse中检索数据,所以在实际获取数据时会有一点延迟。计算机就是计算机,即使解析数据没有被检索到,应用程序也会继续执行代码 我所要做的就是告诉我的应用程序停止执行代码,比如说5秒钟,然后再继续,这应该允许检索解析数据并赶上程序 我尝试过使用sleep time函数,但它只是在插补的时间内停止整个程序,因此从Parse中检索数据也被搁置。同样,加入一个无用的for循环也会做同样的事情 我之所以问这
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
}
}
可通过以下方式实现任意延迟时间:
-(void)performSelector: withObject: afterDelay: (NSObject)
但无论如何,这并不是最有效的方法。因为获取数据在一次可能只需要一秒钟,而在另一次可能需要几秒钟,甚至永远不会。实际上,我可能已经发现了我真正的问题:看起来没有打印结果,这意味着我获取核心数据时出现了问题。我从另一个视图控制器复制了抓取代码,这样我就看不出哪里出错了……实际上,你能提供你在swift中给我的代码吗?