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

时间:2015-10-21 22:40:12

标签: swift parsing pointers casting subclassing

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

一旦固定的挑战被投射到了挑战赛#34; (我的子类),然后我们从中获取一些信息并尝试检索" userTo"," userFrom"和"字符" (这三个都是指针)。在执行以下操作时," 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

挑战和角色都只是说&#34;挑战&#34;和&#34; CharacterCard&#34;,而用户说&#34; MyGame.Friend&#34;。这是否意味着代码将Friend识别为子类而不是其他类? (我可以成功地从PFObjects转换而不是从用户以外的所有指针中进行转换。)

为什么我可以投射&#34;用户&#34;指向一个朋友的指针,但没有投射一个&#34;字符&#34;指向CharacterCard的指针??

我通常会放弃并对本地数据存储区执行正常查询(确实会返回正确的值),但是如果我可以使用&#34;用户&#34; s告诉我,我可以使用&#34;字符&#34;来做这件事,这会让我的生活变得更容易。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

令人难以置信......我已经冥想了几天,在发布这篇文章的几分钟内我找到了解决方案...

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

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

相关问题