2009-10-30 55 views
1

目前我正在使用下面的代碼將數據從以前的會話加載到我的應用程序中。爲了防止沒有以前的數據,我正在使用臨時變量來檢查返回值,然後再進行分配。我只是在這裏發帖,因爲這感覺有點笨重,有沒有辦法檢查磁盤上存在的文件,這樣我可以在繼續之前檢查,或者我有什麼方法可以去?檢查磁盤上是否存在文件?

NSMutableArray *artistCollection; 
NSMutableArray *artistCollection_LOAD; 

artistCollection = [[NSMutableArray alloc] init]; 
artistCollection_LOAD = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/data"]; 
if(artistCollection_LOAD != nil) artistCollection = artistCollection_LOAD; 
else NSLog(@"(*) - Saved Data Not Found"); 

在此之前,我有(見下文),但好像NSKeyedUnarchiver沒有找到一個文件,並返回「無」是看不上我以前分配的數組,你可以想像。

artistCollection = [[NSMutableArray alloc] init]; 
artistCollection = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/data"]; 

加里

+0

不,您的第二個代碼片段* always *會泄漏先前分配的數組,因爲您無條件地使用任何'unarchivedObjectWithFile:'返回的數組替換指向該數組的指針,並且不釋放您創建的數組。 – 2009-10-30 23:49:28

回答

12

Cocoa還有一類爲處理文件系統對象的支持:NSFileManager。您可以使用標準的文件管理器(由+defaultManager提供)結合-fileExistsAtPath:方法,這對於該文件是否存在返回BOOL值:

if([[NSFileManager defaultManager] fileExistsAtPath:@"/data"]) { /* ... */ }

請記住,這並不能告訴你任何東西文件是否可訪問(權限方式),目錄等等。還有其他的NSFileManager函數。