2014-06-25 20 views
0

我試圖通過在Kivy中使用JSON文件和json存儲語言來爲應用程序設置高分追蹤器。Kivy:在iOS上使用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運行它,但是當我用我的iPhone作爲一個試驗裝置運行通過的XCode,當你得分排行榜上面,遊戲結束崩潰。錯誤消息如下。

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

回答

0

我也被這個問題困住了。所以,最後,我能夠解決這個問題。接下來的代碼幫了我很多。

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商店獨特的每個應用程序和操作系統的路徑,在當前的應用程序的代碼存儲。

+0

嗯我一直在玩這個,但一直沒能弄明白。我收到一個錯誤,說名稱'join'沒有定義? – FortuneFaded

+0

@FortuneFaded 'join'是'os.path'的一部分,因此您需要使用'from os.path import join' – melnichevv

+0

來導入它。謝謝。我做了一個測試應用程序來測試它,但仍然無法做到。你可以看一下嗎? http://pastebin.com/g4myCh4n – FortuneFaded

0

你可能會試圖將文件保存在一個無效的位置。嘗試包括要寫出的文件的完整路徑 - 您可以使用kivy_home_dir來幫助完成此操作。

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

試過了,但仍在store_sync中得到錯誤文件「/usr/local/lib/python2.7/site-packages/kivy/storage/jsonstore.py」,第39行 IOError:[Errno 1]不允許操作:'highscore.json' 2014-06-25 23:29:35.968 cookie [3234:60b]應用程序異常退出! 2014-06-25 23:29:36.040 cookie [3234:60b]離開 – FortuneFaded