Kivy:在iOS上使用JSON文件记录高分时出错

0 投票
2 回答
685 浏览
提问于 2025-04-18 10:58

我试着为一个应用设置一个高分追踪器,使用了一个JSON文件和Kivy中的json存储语言。

我导入了JSONstore,然后在我的主游戏类中做了

class Game(FloatLayout):
    highscorejson = JsonStore('highscore.json')
    highscore = NumericProperty(highscorejson.get('highscore')['best'])

在初始化这个类之后,我有一个结束游戏的函数,这个函数会结束游戏并检查新的分数是否超过了之前的最高分。

def end_game(self):
    if self.score > self.highscore:
         self.highscorejson.put('highscore', best = self.score)
    self.highscore = self.highscorejson.get('highscore')['best']

在Kivy中运行时,这一切都运行得很好,但当我通过XCode在我的iPhone上测试时,如果分数超过最高分,游戏结束时就会崩溃。错误信息如下。

  File "/usr/local/lib/python2.7/site-packages/kivy/storage/__init__.py", line 174, in put
   File "/usr/local/lib/python2.7/site-packages/kivy/storage/jsonstore.py", line 39, in     store_sync
 IOError: [Errno 1] Operation not permitted: 'highscore.json'
2014-06-24 21:59:34.385 cookie[2320:60b] Application quit abnormally!
2014-06-24 21:59:34.457 cookie[2320:60b] Leaving

完整错误信息: http://pastebin.com/Zy0DtysW

2 个回答

1

你可能是在尝试把文件保存到一个不合法的位置。试着给你想要保存的文件加上完整的路径 - 你可以使用 kivy_home_dir 来帮助你完成这个操作。

from kivy import kivy_home_dir
from os.path import join
highscore = JsonStore(join(kivy_home_dir, 'highscore.json'))
1

我也曾经遇到过这个问题,最后我终于解决了它。下面的代码对我帮助很大。

from os.path import join

class MyApp(App):
def build(self):
    data_dir = getattr(self, 'user_data_dir')
    store = JsonStore(join(data_dir, 'storage_file.json'))

根据我的理解,user_data_dir 是一个存储每个应用和操作系统独特路径的地方,这个路径是当前应用代码存放的地方。

撰写回答