【问题标题】:Casting PFObject pointer to subclass in parse (swift)在解析中将 PFObject 指针转换为子类(swift)
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多