【发布时间】:2023-04-07 06:05:01
【问题描述】:
对于我们当前的游戏,我们使用 Parse Local Datastore 并固定来自服务器的查询结果,主要查询用户、角色和挑战(最后两个是自定义类)。挑战对象有一个指向创建者、接受者和角色的指针。在 Xcode 中,我们创建了“Friend”类作为 PFUser 的子类,“Challenge”作为 PFObject 的子类(引用“Challenge”解析类),以及“CharacterCard”作为 PFObject 的子类(引用“CharacterCard” “解析类)。
一旦固定的 Challenges 被强制转换为“Challenge”(我的子类),我们就会从中获取一些信息并尝试检索“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
挑战和角色都简单地说“挑战”和“CharacterCard”,而用户说“MyGame.Friend”。这是否意味着代码将 Friend 识别为子类而不是其他子类? (我可以从 PFObjects 成功转换,但不能从用户以外的所有内容中的指针转换)。
为什么我可以将“用户”指针投射到好友,但不能将“角色”指针投射到 CharacterCard??
我通常会放弃并对本地数据存储进行正常查询(它确实返回正确的值),但是如果我可以使用“用户”进行强制转换,那么我可以使用“角色,这将使我的生活变得轻松得多。
感谢您的帮助!
【问题讨论】:
标签: swift parsing pointers casting subclassing