2013-04-03 88 views
0

我正在創建一個iPhone應用程序,同時學習OOP。我有兩個名爲GUTimer和GUInterval的類。每個實例都需要歸檔到plist,並在需要時單獨解除存檔。 我的問題是,我應該創建一個管理這些對象類型的加載和保存的管理器類。還是應該創建單獨的類,一個管理GUTimer實例的保存和加載,另一個管理GUInterval實例的保存和加載? 我還在學習面向對象,這是我的分級項目,所以我只想提出可能的最佳解決方案。任何幫助,將不勝感激。 謝謝。用於從文件創建一組對象的單獨的類?

+0

我覺得閱讀和寫作應該在GUTimer和GUInterval,無需進行額外的課程,因爲所有這些都是模型的一部分。 –

回答

1

我會對你的對象實施NSCoding協議,然後用這樣的存檔/取消存檔即可:

+ (NSObject *)readArchiveFile:(NSString *)inFileName 
{ 
    NSFileManager *fileMgr = [NSFileManager defaultManager]; 
    NSString *documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectoryPath, inFileName]; 

    NSObject *returnObject = nil; 
    if([fileMgr fileExistsAtPath:filePath]) 
    { 

     returnObject = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 
    } 

    return returnObject; 

} 

+ (void)archiveFile:(NSString *)inFileName inObject:(NSObject *)inObject 
{ 
    NSString *documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectoryPath, inFileName]; 
    BOOL didSucceed = [NSKeyedArchiver archiveRootObject:inObject toFile:filePath]; 
    if(!didSucceed) 
    { 
     NSLog(@"File %@ write operation %@", inFileName, didSucceed ? @"success" : @"error"); 
    } 

} 

+ (void)deleteFile:(NSString *)inFileName 
{ 
    NSFileManager *fileMgr = [NSFileManager defaultManager]; 
    NSString *documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectoryPath, inFileName]; 
    NSError *error; 
    if ([fileMgr fileExistsAtPath:filePath] && [fileMgr removeItemAtPath:filePath error:&error] != YES) 
    { 
     NSLog(@"Unable to delete file: %@", [error localizedDescription]); 
    } 
} 
0

這個問題並沒有真正的答案。如果你正在學習面向對象,那麼你很快就會明白這一點。我可以給出的最好的建議是將你的對象分解成功能區域和大小。爲了可讀性,你想避免巨大的類,但除此之外,它基本上取決於你自己的偏好。如果你能證明一個特定的設計決定,那麼它可能適合你。