如何使用CloudKit查询来调整segues?

时间:2015-11-10 11:39:18

标签: ios swift uitabbarcontroller segue cloudkit

我创建了一个由CloudKit备份的登录页面。 我想知道如果登录具有特定值,如何创建条件segue,然后根据该值将用户定向到View Controller

详细说来,我想连接三个Segues:

  

登录id segue:LoginSuccessSegue

     

员工标签栏id segue:idStaffTabBar

     

学生标签栏id segue:idStudentTabBar

First Segue 的 LoginSuccessSegue : 登录控制器中有一个show segue id LoginSuccessSegue连接到人员标签栏控制器和学生标签栏控制器。

第二个猜测 的 idStaffTabBar : 执行queryProfileType()后,它将在列表中查找配置文件类型,以检查用户配置文件是教师值还是其他内容。那么如果这是真的“LoginSuccessSegue”会自动将用户带到人员标签栏控制器,“StaffBookedVC.self”使用its segue idStaffTabBar`

第三个猜测 的 idStudentTabBar : 如果用户不是教师,则按下登录按钮后重定向到学生标签栏控制器,使用idStudentTabBar“stdBookingVC.self”或

  

如何在多个视图中实现自动条件登录起诉segues和云套件查询?

这是登录按钮的代码:

@IBAction func btnSignInTapped(sender: UIButton)
{
    let userEmailAddress = userEmailAddressTextField.text
    let userPassword = userPasswordTextField.text


    if(userEmailAddress!.isEmpty || userPassword!.isEmpty)
    {
        notifyUser("Empty fields", message: "all fields are required")
    }
    print("fetching is in progress")

    queryProfileType()

    print("\nfetching had stopped")
}//end of signInbtn

func queryProfileType()
{
    queryCredentials()

    print("\nProfile Query starting")
    //execute query
    let organizers = ["Teacher || Youtuber || Instagrammer || "]
    let predicate = NSPredicate(format: "ProfileType = '\(organizers)' ")
    print("\nThis is the predicate\n\(predicate)")
    let query = CKQuery(recordType: "RegisteredAccounts", predicate: predicate)
    publicDatabase!.performQuery(query, inZoneWithID: nil) { results, error in
        if (error != nil)
        {
            print(error)
        }else
            {

                if (results! == organizers)
                {
                    self.performSegueWithIdentifier("idStaffTabBar", sender: StaffBookedVC.self)
                }else{
                    self.performSegueWithIdentifier("idStudentTabBar", sender: stdBookingVC.self)

                }
                print("\(results)\nthese are the printed results")
            }

        }
    let firstFetch = CKFetchRecordsOperation()
    let secondFetch = CKFetchRecordsOperation()
    secondFetch.addDependency(firstFetch)

    let queue = NSOperationQueue()
    queue.addOperations([firstFetch, secondFetch], waitUntilFinished: false)
}

这是故事板segues Storyboard

的图片

如果您的答案将包含这些方法,请向我展示一些示例: shouldPerformSegueWithIdentifier和prepareForSegue

这对我不起作用

self.presentViewController(SignInNavigationVCTabBars, animated: true,
                { results, error in

                if (results! == organizers)
                {
                    self.performSegueWithIdentifier("idStaffTabBar", sender: StaffUITABbarVC.self)

                }else{
                    self.performSegueWithIdentifier("idStudentTabBar", sender: StdUITABbarVC.self)

                }
            }

`

1 个答案:

答案 0 :(得分:0)

您需要执行presentModalViewController之类的操作,以便在navigationController方法中首先显示queryProfileType。然后在加载navigationController之后执行一些智能逻辑来确定要去的路线。因此需要自定义UINavigationController

更简单方式:

loginViewController移动到导航控制器堆栈中,然后将两个现有的段,即idStaffTabBaridStudentTabBar链接到它。这将解决问题。