swift - 将 PFObject 指针转换为解析中的子类(swift)

标签 swift parsing pointers casting subclassing

对于我们当前的游戏,我们使用 Parse Local Datastore 并固定来自服务器的查询结果,主要查询用户、角色和挑战(最后两个是自定义类)。挑战对象有一个指向创建者、接收者和角色的指针。在 Xcode 中,我们创建了类“Friend”作为 PFUser 的子类,“Challenge”作为 PFObject 的子类(引用“Challenge”解析类),以及“CharacterCard”作为 PFObject 的子类(引用“CharacterCard” “解析类)。

一旦将固定的挑战转换为“挑战”(我的子类),我们就会从中获取一些信息并尝试检索“userTo”、“userFrom”和“character”(这三个都是指针).执行以下操作时,“userFrom”似乎已正确填充和转换,但“角色”未分配任何内容:

let gm = GameManager.sharedManager
challenge = gm.oldChallenges[indexPath.row]

let friend = challenge.userFrom as! Friend
cell.friendPic.image = friend.profilePic //casts properly, does as expected

let character = challenge.character as! CharacterCard
cell.characterPic.image = UIImage(data: character.thumbnail) //produces an error saying Key "thumbnail" has no data.  Call fetchIfNeeded before getting its value

我注意到的一件事是在打印 Challenge 对象时:

CHALLENGE: <Challenge: 0x145dd3810, objectId: AiQgbc6ixN, localId: (null)> {
attempts = 0;
character = "<CharacterCard: 0x145ddc0b0, objectId: fwgW9SbMdD, localId: (null)>";
characterName = Blue;
deletedByFrom = 0;
deletedByTo = 0;
played = 0;
userFrom = "<MyGame.Friend: 0x145d63e10, objectId: WutVKzF0Yh, localId: (null)>";
userFromFBID = 10156116668365451;
userFromName = "Jesus Sainz";
userTo = "<MyGame.Friend: 0x145e7d140, objectId: JrkFYMaQ5P, localId: (null)>";
}
Character: <CharacterCard: 0x145ddc0b0, objectId: fwgW9SbMdD, localId: (null)> {
}
friend fbName: Jesus Sainz

Challenge 和 Character 都只说“Challenge”和“CharacterCard”,而用户则说“MyGame.Friend”。这是否意味着代码将 Friend 识别为子类而不是其他类? (我可以成功地从 PFObjects 进行转换,但不能从用户以外的所有指针进行转换)。

为什么我可以将“用户”指针转换为 Friend 而不能将“角色”指针转换为 CharacterCard?

我通常会放弃并对本地数据存储进行正常查询(它确实返回正确的值),但如果我可以用“用户”进行转换,那么某些事情告诉我我可以用“角色,这会让我的生活变得轻松很多。

谢谢你的帮助!

最佳答案

难以置信...我已经为此苦苦挣扎了好几天,在发布这篇文章的几分钟内我就找到了解决方案...

我想通过简单地固定字符应该足以访问它们,但似乎我唯一需要做的就是简单地从挑战(从本地数据存储查询)中创建一个固定字符数组。

我实际上仍然对为什么这解决了这个问题感到困惑,因为我并没有真正明确地访问该数组来获取信息,但似乎只有该数组似乎允许我将指针转换为 CharacterCard .很奇怪......但我希望这对某人有所帮助。

关于swift - 将 PFObject 指针转换为解析中的子类(swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33270472/

相关文章:

swift - 将照片添加到阵列并显示到 Collection View 错误

ios - 如何使用 Swift 从警报中的按钮单击返回 bool

html - 如何在 Objective C 中解析 HTML

c++ - std::vector 如何将对象复制到其内部存储

c - 初始化结构指针 - c

ios - HLS 元数据 ID3 标签不起作用

ios - swift :- Thread 1: Fatal error: Remainder of or division by zero

python - 一个足够的 MUD 风格和适用于 Python 的文本解析器的例子

java - 正则表达式用于解析句子并跳过括号内容

C 为双指针赋值