2011-06-29 71 views
0

嗯,我知道這聽起來可能很基本,但我確實一直在尋找,並且找不到直接的答案。我試圖每次獲取更新時將位置座標保存到文件 - 聽起來很簡單....我有兩個問題:一個是數據類型(writeToFile似乎只保存NSData),另一個是附加到文件的結尾。我試圖使用NSKeyedArchiver,但它寫了一堆垃圾,我無法找到如何追加到文件的末尾。將文件位置/ GPS座標寫入文件

這是我的代碼 - 如果你能幫助,我將不勝感激。謝謝!

.... 

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSNumber *numLat = [NSNumber numberWithFloat:location.coordinate.latitude]; 
NSNumber *numLong = [NSNumber numberWithFloat:location.coordinate.longitude]; 


[array addObject:numLat];  
[array addObject:numLong];  

NSFileHandle *file; 
file = [NSFileHandle fileHandleForUpdatingAtPath: @"./location.txt"]; 

if (file == nil) 
    NSLog(@"Failed to open file"); 


[file seekToEndOfFile]; 

[file writeData: array]; //BTW - this line doesn't work if I replace array with numLat which is an NSNumber - unlike what many people have said in various discussions here 

OR - 爲對保存到文件部分(最後兩行):

NSString *path = @"./location.txt"; 
[NSKeyedArchiver archiveRootObject:array toFile:path]; 

回答

1
// Get the path to the Documents (this is where your app saves data) 
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* documentsPath = [searchPaths objectAtIndex: 0]; 
[array writeToFile:[documentsPath stringByAppendingPathComponent:@"location"] atomically:YES]; 

要加載的數據返回到數組,使用

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* documentsPath = [searchPaths objectAtIndex: 0]; 
array = [[NSMutableArray alloc] initWithContentsOfFile:[documentsPath stringByAppendingPathComponent:@"location"]; 
+0

謝謝,這是有幫助,但我怎樣才能追加到文件的結尾?我厭倦了使用它並且寫了兩次,然後當我讀到時我只得到最後一次寫入。 – TommyG

+0

@TommyG當你在數組上使用writeToFile方法時,它會寫出整個數組,覆蓋之前存在的任何東西。所以如果你正在創建一個新的數組(而不是從文件中加載它),那麼再次寫出它只會寫入自從數組初始化之後添加到數組中的新數據。爲了追加,您需要將數據加載回數組,然後將新數據添加到數組中,然後再次將數組寫入。根據您正在編寫的數據量,您可能會遇到速度/內存方面的問題。 –

+0

那麼最佳做法是什麼?當需要追加到文件結尾時,人們做什麼? – TommyG