gpt4 book ai didi

swift - iPhone AppDelegate 仅将数组的第一个对象返回给 Watch OS 2 iOS 9

转载 作者:行者123 更新时间:2023-11-30 10:05:47 24 4
gpt4 key购买 nike

我刚刚从 Watch OS 1 教程中学习了如何创建 Watch 应用,除了 Watch 和 iPhone 之间的通信之外,大部分内容都可以转换为 OS 2。以下是我正在采取的步骤:

1 - 观察 InterfaceController.swift - 创建一个 WCSession,如果用户登录或未登录,则将消息发送到 iPhone。如果是,则询问表格数据,如果没有,则显示一个标签以转到电话。

2 - 我正确地获取用户是否登录,然后我要求提供一组狗名称来填充我的表。

override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)

if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
print("Activated Session ----")

if session.reachable == true {


session.sendMessage(["content" : "isLoggedIn"], replyHandler: { (result) -> Void in

if let response = result["isLoggedIn"] as? String {

if response == "true" {

userLoggedOn = true


self.session.sendMessage(["content":"getDogNames"], replyHandler: { (result) -> Void in

if let nameRequest = result as? [String:[String]] {

if let dogData = nameRequest["names"] {

if dogData.count > 0 {

dogNames = dogData
self.logInLabel.setHidden(true)
self.loadTableData()
}

else {

self.logInLabel.setHidden(false)
self.logInLabel.setText("Add dog profiles from iPhone")
}

print(dogData)

}
}

}, errorHandler: { (error) -> Void in
print("got names error")
})

} else {

userLoggedOn = false
self.logInLabel.setText("Create a profile from iPhone")
}
}
}, errorHandler: { (error) -> Void in
print("error:------ /(error)")
})
}
}
}

3 - iPhone AppDelegate.swift - 在我的结果中,我仅获取从 parse.com 数据库查询的数组的第一个对象。

@available(iOS 9.0, *)
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {

if let watchMessage = message as? [String : String] {

if let content = watchMessage["content"] {

if content == "isLoggedIn" {

if PFUser.currentUser() != nil {

replyHandler(["isLoggedIn":"true"])

}

else {

replyHandler(["isLoggedIn":"false"])
}

} else if content == "getDogNames" {

let query = PFQuery(className: "dogInfo")
query.whereKey("userId", equalTo: (PFUser.currentUser()?.objectId)!)
query.orderByAscending("dogName")
query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in

if error == nil && objects!.count > 0 {

for object in objects! {

var dogsArray = [String]()

if let message = object["dogName"] as? String {

dogsArray.append(message)
}

replyHandler(["names":dogsArray])
}
}
})
}
}
}
}

我已经通过手动输入进行了测试 var dogsArray = [“狗1”,“狗2”,“狗3”]结果是所有 3 个项目都回来了。我确实知道我应该得到 7 件元素,但只得到了第一个。非常奇怪,非常感谢任何帮助!

最佳答案

您的代码中似乎存在逻辑错误,请尝试将其更改为:

query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if error == nil && objects!.count > 0 {
var dogsArray = [String]() // moved this
for object in objects! {
if let message = object["dogName"] as? String {
dogsArray.append(message)
}
}
replyHandler(["names":dogsArray]) // and this
}

})

我将对replyHandler的调用以及dogsArray的创建移到了for循环之外,以便它累积所有狗的名字,然后调用replyHandler。

关于swift - iPhone AppDelegate 仅将数组的第一个对象返回给 Watch OS 2 iOS 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36064362/

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