Kivy 移植到 iOS。打开文件有效,而写入文件无效

Kivy porting to iOS. Opening a file works while writing to a file does not

重置保存给出错误信息"IOError: [Errno 9] Bad file descriptor"

def reset_save(self):
    try:
        file = open("./save.txt", "rw+")
    except:
        print("Wrong when saving to file.")
    else:
        for n in self.highscore:
            file.write('0' + '\n')
        self.highscore = [0,0,0,0,0,0,0,0,0,0]
        file.close()

"rw+" 从 android 版本的 "w" 更改而来,使用 "w" 输出 "Wrong when saving to file"。 android 版本使用此代码没有问题。

两个版本的get_save都没有问题

def get_save(self):
    try:
        file = open("./save.txt", "r")
    except:
        print("Wrong when opening file.")
    else:
        n = 0
        for line in file:
            self.highscore[n] = float(line)
            n += 1
        file.close()

reset_save用于写入10行零,重置高分列表。

get_save 获取 save.txt 中的行并将它们放入列表

我使用 kivy 指南从 android 移植到 iOS。它正在通过 Xcode 构建。游戏的其余部分与 android 版本相同。

当您的应用程序处于可写状态时,并非所有平台上的所有目录都是可写的。在 iOS,所有应用程序都被沙盒化,应用程序所在的目录不可写。但 Android 的情况并非如此。 阅读会起作用,因为我猜你正在运送一个默认的 save.txt 文件。你不应该,如果应用程序启动时不存在,则创建它。

如果要保存文件,请将其保存在App.user_data_dir中。这是您的 reset_save 函数的示例,已修改:

from kivy.app import App
from kivy.logger import Logger
from os.path import join

def reset_save(self):
    user_data_dir = App.get_running_app().user_data_dir
    filename = join(user_data_dir, "save.txt")
    try:
         self.highscore = [0] * 10
         with open(filename, "w") as fd:
             for n in self.highscore:
                 fd.write('0' + '\n')
    except:
         Logger.exception("Cannot reset save file")