2013-09-25 27 views
0

大家好我們寫了一個在仿真器上工作得很好的程序。但是,當我們上傳項目到我們自己的設備時,它可以讀取文件和顯示項目,但是當它試圖擦除文件並重新寫入時,它不起作用。txt文件寫入在仿真器中工作,但不在真實設備中xcode

什麼可能是可能的問題,以及如何解決這個問題?

+0

請問您可以寫代碼 – Sauvage

+0

[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil]; [[NSData data] writeToFile:filePath atomically:YES]; NSFileHandle * handle = [NSFileHandle fileHandleForWritingAtPath:filePath]; [handle truncateFileAtOffset:[handle seekToEndOfFile]]; [handle writeData:[something dataUsingEncoding:NSUTF8StringEncoding]]; – albatross

+0

嘗試使用'NSString * directory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];'作爲目錄。然後完整路徑是這樣的:'directory = [directory stringByAppendingPathComponent:fileName];' – Sauvage

回答

2

好像你正試圖在應用程序包中寫入文件。出於安全考慮,Apple不會讓您觸摸該軟件包。你必須:

  • 檢查您的文件在沙盤
  • 如果不存在,從應用程序包用複製的文件複製
  • 然後,工作

,我認爲它的工作原理在模擬器中,因爲在模擬器中運行應用程序時沒有沙箱。 在您的應用程序沙箱中查找正確文件夾的文檔如下。

Sandbox documentation

File System programming guide

編輯:

下面是一些代碼(沒有在Xcode中運行它,可能會有一些錯字錯誤)從束中的文件複製到指定目錄Documents目錄。請注意,此代碼每次都會覆蓋Documents目錄中的文件。

NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
NSString *fileDirectory = [documentsDirectory stringByAppendingPathComponent:@"MyDirectory"]; 

// Create folder if it does not exist 
BOOL isDirectory; 
if (![[NSFileManager defaultManager] fileExistsAtPath:fileDirectory isDirectory:&isDirectory]) 
{ 
    NSError *error; 
    [[NSFileManager defaultManager] createDirectoryAtPath:fileDirectory withIntermediateDirectories:NO attributes:nil error:&error]; 
    if(error) 
    { 
     NSLog(@"Error creating folder : %@",error.localizedDescription); 
     return; 
    } 
    else 
    { 
     NSLog(@"Folder created"); 
    } 
} 

// Save to disk 
NSString *filePathOnDisk = [fileDirectory stringByAppendingPathComponent:@"fileInSandbox.foo"]; 
NSString *pathFromBundle = [[NSBundle mainBundle] pathForResource:@"fileFromBundle" ofType:@"foo"]; 
NSData *fileData = [NSData dataWithContentsOfFile:pathFromBundle]; 
NSError *error; 
if (![fileData writeToFile:filePathOnDisk options:NSDataWritingAtomic error:&error]) 
{ 
    NSLog(@"Error writing file : %@", error.localizedDescription); 
} 
else 
{ 
    NSLog(@"File saved to disk successfully"); 
} 

然後,當你想與你複製的文件工作,用我們filePathOnDisk創建的路徑。

請再次閱讀與文件管理相關的文檔,以瞭解您對文件所做的操作。

+0

的事情是,我們有創建的文件和display.It可以從該文件讀取,但問題是它不能寫入或追加該文件。 – albatross

+0

這正是您第一次運行應用程序時必須將其複製到應用程序沙箱中的原因。然後,您將始終使用複製的文件進行編輯。 – NSZombie

+0

我怎麼能做到這一點「從應用程序包複製 然後,使用複製的文件」 – albatross

相關問題