将 skspritenode 位置保存到 plist 不起作用
Posted
技术标签:
【中文标题】将 skspritenode 位置保存到 plist 不起作用【英文标题】:Saving skspritenode position to plist doesn't work 【发布时间】:2015-10-13 14:56:06 【问题描述】:我所做的很简单,我正在尝试将精灵节点坐标保存到 plist。如果我手动强制输入静态值,它可以正常工作,但如果我尝试将 node.position.x 放入 plist,它就不起作用。我当然在使用 writeToFile 之前将 node.position.x 放入一个 NSNumber。
另一个注意事项是我从以下位置调用此函数:- (void)applicationWillResignActive:(UIApplication *)application
appdelegate 的功能。
查看控制台,所有节点位置都显示正常,只是没有写入 plist。如果我在其中强制输入 6 或 10 之类的数字,或者它写得很好。
任何帮助将不胜感激。
for (SKSpriteNode* node in ar)
NSNumber* x = [NSNumber numberWithInt:(int)node.position.x];
NSNumber* y = [NSNumber numberWithInt:(int)node.position.y];
[node_locs addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:x,@"X",y,@"Y",nil]];
然后我执行我知道可行的通常 writeToFile。
【问题讨论】:
如果您认为问题在于应用程序没有足够的时间将内容写入磁盘,请尝试创建一个 background task 来处理它。 我刚刚发现 applicationWillResignActive 方法被调用了两次,第二次节点位置被旧的 x 和 y 位置覆盖。我似乎有一个问题,即我的 viewDidLoad 方法从我的 skscene 的视图控制器中被多次调用,就此而言,skscene didMoveToView 方法也被多次调用。这可能是什么原因造成的? 老实说,我什至不确定加载方法与辞职委托方法有何关系,但通常viewDidLoad
可以在同一时间调用两次,如果您呈现两个视图不同的控制器具有相同的配置。尝试调试它并在这两个调用中比较视图控制器。
感谢您的意见。我试试看。
【参考方案1】:
好的,这就是我的问题。当我调用 NSNotificationCenter 方法时,我保存坐标的方法被调用了两次。我不知道为什么会这样,但这很烦人。如果此时解决了我的问题。感谢大佬的回复。
【讨论】:
以上是关于将 skspritenode 位置保存到 plist 不起作用的主要内容,如果未能解决你的问题,请参考以下文章