2016-02-12 61 views
0

我有2個方法,一個用於將數組保存到文件,另一個用於從文件中加載數組,但是當我試圖讀取數組時,沒有任何反應,像數組是空的。 我的代碼:pathForResource不返回數組

- (IBAction)write:(id)sender 
{ 
    NSArray *array = [racersArray copy]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
    NSString *libraryDirectory = [paths objectAtIndex:0]; 
    NSString *location = [libraryDirectory stringByAppendingString:@"/history.plist"]; 
    [array writeToFile:location atomically:YES]; 
} 

- (IBAction)read:(id)sender 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"file" ofType:@"plist"]; 
    NSArray *array = (path != nil ? [NSArray arrayWithContentsOfFile:@"/history.plist"] : nil); 
} 
+0

仔細比較代碼中的兩個文件路徑。 – gnasher729

+1

這就是爲什麼你會寫一個方法「pathForHistoryPList」_once_並在需要時使用它。爲了避免「讀取」和「寫入」使用不同路徑的愚蠢錯誤。 – gnasher729

回答

5

您正在閱讀/自/至兩個不同的地方寫。

  • 你寫Library文件夾(應該是Library/Application Support或一些這樣的下,但我離題)。
  • 您從應用程序包中讀取。
+0

是的,看起來確實如此。但我不知道,我應該如何編輯'NSString * path..'行來完成它應該做的事情。 – kolaj

+0

@kolaj:真的嗎?你有兩個方法需要相同的參數,不知道如何使參數相同? – gnasher729

0

嘗試用此方法可能會幫助你。

對於保存

-(IBAction)save_Action:(id)sender{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; 
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"]; 
    [plistData writeToFile:plistPath atomically:YES]; 
} 

爲了獲取路徑

-(IBAction)retrive:(id)sender{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; 
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"]; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) 
    { 
     plistPath = [[NSBundle mainBundle] pathForResource:@"manuallyData" ofType:@"plist"]; 
    } 
} 
+0

stil返回空數組 – kolaj

+0

讓我檢查一次 – Subbu

+0

它的工作f9只是看不起kolaj我測試了它 – Subbu

0
- (IBAction)savetapped:(id)sender { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; 
    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"json.geojson"]; 
    [paths writeToFile:plistPath atomically:YES]; 
} 
- (IBAction)retriveTapped:(id)sender { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"json.geojson"]; 
    NSLog(@"%@",documentsPath); 
    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) 
    { 
     plistPath = [[NSBundle mainBundle] pathForResource:@"json" ofType:@"geojson"]; 
    } 
    NSLog(@"%@",plistPath); 
} 
0

了好一會兒才弄清楚,我真的不知道你正在嘗試做的。

pathForResource爲您提供應用程序束中的資源路徑。您只能從讀取。你永遠不會寫在那裏。有時候人們在應用程序捆綁中擁有文件的初始版本,然後將其寫入其他地方。如果這就是你想要的,那麼你很可能需要:

(1)編寫一個方法,返回應用程序運行後數組將被存儲的路徑。 (2)「write」方法調用此路徑方法以知道在哪裏寫入數組。 (3)「讀取」方法調用這個路徑方法來知道在哪裏讀取數組,然後讀取數組。但是,數組可能爲零,因爲您的應用程序是第一次運行,或者陣列寫入不正確。在這種情況下,您可以使用pathForResource來獲取文件在應用程序包中的路徑,然後從中讀取該文件。