簡體   English   中英

將IBAction連接到Objective-C中的菜單項時出錯

[英]Error when connecting an IBAction to menu item in objective-c

在用Xcode制作的mac版的Objective-C程序中,我有一些方法可以保存文件並從文件中加載和加載文件。 這些方法工作正常,但是當我嘗試將其操作連接到菜單欄項(即“文件”菜單下的“保存並加載”)時,保存停止工作。 它正確運行了該方法,但實際上並未保存到保存文件中。

當我斷開操作與菜單欄項的連接並將其恢復為以前的狀態時,它仍然無法正常工作。

這是Xcode的錯誤嗎?如果您忽略了默認的保存和加載操作,該錯誤是否在其中? 因為現在我的程序壞了,所以我找不到解決方法。

這些方法中的代碼與此類似:

- (IBAction)saveGame: (id)sender{ // saving the game
    [self saveAlert];
    NSString *saveFileContents = [NSString stringWithFormat:@"#%d #%d", int1, int2];
    NSString *file_path = [[NSBundle mainBundle] pathForResource:@"save" ofType:@"txt"];
    NSString *whatWrite = [NSString stringWithFormat:@"%@",saveFileContents];
    [whatWrite writeToFile:file_path atomically:YES encoding:NSUTF8StringEncoding error:Nil];
    self.feedLabel.stringValue = @"You just saved";
}


- (IBAction)loadGame: (id)sender{ //loading the save
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"save" ofType:@"txt"];
    NSString *aString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:Nil];
    NSMutableArray *substrings = [NSMutableArray new];
    NSScanner *scanner = [NSScanner scannerWithString:aString];
    [scanner scanUpToString:@"#" intoString:nil];

    while(![scanner isAtEnd]) {
        NSString *substring = nil;
        [scanner scanString:@"#" intoString:nil];
        if([scanner scanUpToString:@" " intoString:&substring]) {
            [substrings addObject:substring];
        }
        [scanner scanUpToString:@"#" intoString:nil];
    }

    int1 = [[substrings objectAtIndex:0] intValue];
    int2 = [[substrings objectAtIndex:1] intValue];
}

當我運行程序並保存時,它說已保存,並且[self saveAlert]方法按預期運行。 但是,當我加載時,它會加載一個保存文件,這是沒有覆蓋保存時的默認保存文件(即,您在不先保存的情況下加載)。 因此,問題可能出在儲蓄方面嗎?

當我在單獨的程序中運行該代碼時,以及在將操作連接到文件菜單進行保存和加載之前,該代碼都運行良好,因此我認為問題不存在於此。

任何幫助將不勝感激,或者如果您需要更多信息。 謝謝。

您現有代碼不會覆蓋save.text文件的原因是應用程序無法覆蓋其資源。

這是包含應用程序本身的捆綁目錄。 不要在此目錄中寫入任何內容。 為防止篡改,捆綁目錄在安裝時簽名。 寫入此目錄會更改簽名,並阻止您的應用程序再次啟動。

而是寫到您的文檔目錄。 您可以像以下方式獲取documents目錄的路徑:

NSString * docsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

您只需將您的save.text文件復制如下

請注意,簡單的iOS上的NSHomeDirectory()返回應用程序包的路徑。 一旦擁有了documents目錄的路徑,就可以寫入資源,例如save.text,如下所示:

NSString * path = [docsDir stringByAppendingPathComponent:@"save.text"];
[myString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];

在執行過程中,您可以隨時從文檔目錄中編輯文件。

參考: -[NSString writeToFile:]不會更改文件的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM