2013-04-03 49 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

这个问题并没有真正的答案。如果你正在学习面向对象,那么你很快就会明白这一点。我可以给出的最好的建议是将你的对象分解成功能区域和大小。为了可读性,你想避免巨大的类,但除此之外,它基本上取决于你自己的偏好。如果你能证明一个特定的设计决定,那么它可能适合你。