未在 GetStream Swift SDK 上调用回调
Callbacks not called on GetStream Swift SDK
我有一个集成了 GetStream 的空白 Xcode 项目
播客文件:
pod 'GetStream'
已在 AppDelegate 上初始化 GetStream:
Client.config = .init(apiKey: "XXXXX", appId: "XXXX", logsEnabled: true)
Client.shared.setupUser(token: "XXXXX") { (result) in
// THIS IS SUCCESSFUL, working perfectly
}
在 ViewController 上,尝试从提要中获取活动(其中包含活动)
let userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")
let activity = Activity(actor: User.current!, verb: "pin", object: "Place:72482734")
userFeed.add(activity) { result in
print("Callback called") // ----> Never called
if let activity = try? result.get() {
print(activity.id) // ----> Never called
} else {
print("FAILED") // ----> Never called
}
}
userFeed.get() { result in
print(result) // ----> Never called
}
但是,由于我有 logsEnabled
到 true
,我能够在 Xcode 控制台中看到原始的 JSON 值以及我的所有活动那个饲料。活动已成功发布到提要,但只是没有调用闭包。
GetStream 环境
GetStream版本:2.2.2
Xcode版本:11.5
Swift版本:5
平台 运行 GetStream:iOS 13.5
macOS 版本 运行 Xcode:macOS 10.15.4
附加信息
我还尝试删除所有 pods 并使用 pod 'GetStream', '~> 2.2.2'
和 pod 'GetStreamActivityFeed'
安装 GetStream
`
找到解决方案,检查代码,发现从本地范围调用方法时 self
变为 nil。创建对 Feed 的强引用或 activity 解决了这个问题。
class ViewController {
var userFeed : FlatFeed! // create strong reference
var activity : Activity! // create strong reference
override func viewDidLoad() {
super.viewDidLoad()
userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")
activity = Activity(actor: User.current!, verb: "pin", object: "Place:72482734")
userFeed.add(activity) { [weak self] result in
if let activity = try? result.get() {
print(activity.id)
} else {
print("FAILED")
}
}
userFeed.get() { [weak self] result in
print(result)
}
}
}
回调存储在 userFeed
对象中,我认为该对象的寿命不足以接收响应(超出范围)。要解决此问题,只需将 userFeed
对象保存在范围之外。使用您的代码作为 ViewController 属性 的示例:
class ViewController: UIViewController {
let userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")
func doTheThing() {
let activity = Activity(actor: User.current!, verb: "pin", object: .text("Place:72482734"))
userFeed.add(activity) { result in
print("Callback called") // ----> Never called
if let activity = try? result.get() {
print(activity.id) // ----> Never called
} else {
print("FAILED") // ----> Never called
}
}
userFeed.get() { result in
print(result) // ----> Never called
}
}
}
我有一个集成了 GetStream 的空白 Xcode 项目
播客文件:
pod 'GetStream'
已在 AppDelegate 上初始化 GetStream:
Client.config = .init(apiKey: "XXXXX", appId: "XXXX", logsEnabled: true)
Client.shared.setupUser(token: "XXXXX") { (result) in
// THIS IS SUCCESSFUL, working perfectly
}
在 ViewController 上,尝试从提要中获取活动(其中包含活动)
let userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")
let activity = Activity(actor: User.current!, verb: "pin", object: "Place:72482734")
userFeed.add(activity) { result in
print("Callback called") // ----> Never called
if let activity = try? result.get() {
print(activity.id) // ----> Never called
} else {
print("FAILED") // ----> Never called
}
}
userFeed.get() { result in
print(result) // ----> Never called
}
但是,由于我有 logsEnabled
到 true
,我能够在 Xcode 控制台中看到原始的 JSON 值以及我的所有活动那个饲料。活动已成功发布到提要,但只是没有调用闭包。
GetStream 环境
GetStream版本:2.2.2 Xcode版本:11.5 Swift版本:5 平台 运行 GetStream:iOS 13.5 macOS 版本 运行 Xcode:macOS 10.15.4
附加信息
我还尝试删除所有 pods 并使用 pod 'GetStream', '~> 2.2.2'
和 pod 'GetStreamActivityFeed'
`
找到解决方案,检查代码,发现从本地范围调用方法时 self
变为 nil。创建对 Feed 的强引用或 activity 解决了这个问题。
class ViewController {
var userFeed : FlatFeed! // create strong reference
var activity : Activity! // create strong reference
override func viewDidLoad() {
super.viewDidLoad()
userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")
activity = Activity(actor: User.current!, verb: "pin", object: "Place:72482734")
userFeed.add(activity) { [weak self] result in
if let activity = try? result.get() {
print(activity.id)
} else {
print("FAILED")
}
}
userFeed.get() { [weak self] result in
print(result)
}
}
}
回调存储在 userFeed
对象中,我认为该对象的寿命不足以接收响应(超出范围)。要解决此问题,只需将 userFeed
对象保存在范围之外。使用您的代码作为 ViewController 属性 的示例:
class ViewController: UIViewController {
let userFeed = Client.shared.flatFeed(feedSlug: "FLAT_FEED_ID", userId: "LOGGED_USER_ID")
func doTheThing() {
let activity = Activity(actor: User.current!, verb: "pin", object: .text("Place:72482734"))
userFeed.add(activity) { result in
print("Callback called") // ----> Never called
if let activity = try? result.get() {
print(activity.id) // ----> Never called
} else {
print("FAILED") // ----> Never called
}
}
userFeed.get() { result in
print(result) // ----> Never called
}
}
}