2009-04-14 192 views
1

我需要在應用程序執行時存儲某些信息,並在應用程序啓動時再次獲取它。我嘗試使用GData將其存儲爲XML,但沒有成功。 我使用NSFileHandle它不會給我一個錯誤,但它無法創建一個.txt文件的讀/寫目的。有沒有其他的方式來存儲和檢索iPhone上的數據。以下是我的NSFileHandle代碼。iPhone永久存儲器

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myFile.txt"]; 
//NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:@"file://localhost/Users/shraddha/Desktop/info.txt"]; 
NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:@"myFile.txt"]; 
[fh seekToEndOfFile]; 
NSData *data = [camName dataUsingEncoding:NSASCIIStringEncoding]; 
[fh writeData:data]; 
[fh closeFile]; 

對於閱讀

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myFile.txt"]; 
//NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:@"file://localhost/Users/shraddha/Desktop/info.txt"]; 
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:@"myFile.txt"]; 
if(fh == nil) 
    return nil; 
else 
{ 
    NSData *data = [fh readDataOfLength:8]; 
    NSString *retStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
    return retStr; 
} 

回答

10

您正在嘗試寫入資源目錄,您可能沒有權限執行此操作。嘗試更改代碼的第一行以指向文檔目錄:

NSArray *savePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSMutableString *savePath = [NSMutableString stringWithString:[savePaths objectAtIndex:0]]; 
[savePath appendString:@"/myFile.txt"]; 

此外,您不需要擔心文件句柄。 NSData能夠自己寫入磁盤:

BOOL result = [data writeToFile:savePath atomically:YES]; 
3

每一個iPhone應用程序在掌握讀/寫名稱/值對可以是非常,非常,用於存儲有用的能力像用戶喜好的小信息。這些首選項也可以由應用程序的用戶編輯(如果您選擇)。

另一個選擇比試圖做文本文件存儲和檢索更強大(我從來不喜歡這個選項,特別是iPhone上糟糕的XML解析支持)是sqlite。 sqlite是一款非常輕量級的關係數據庫引擎,包含在每個iPhone和iPod touch中。