0

我在学习 OOP 时正在创建一个 iPhone 应用程序。我有两个名为 GUTimer 和 GUInterval 的类。每个实例都需要存档到 plist 并在需要时单独取消存档。我的问题是,我是否应该创建一个管理器类来管理这两种对象类型的加载和保存。或者我应该创建单独的类,一个管理 GUTimer 实例的保存和加载,一个管理 GUInterval 实例的保存和加载?我仍在学习 OOP,这是针对我的分级项目,所以我只想提出最好的解决方案。任何帮助,将不胜感激。谢谢。

4

2 回答 2

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]);
    }
}
于 2013-04-03T18:16:00.150 回答
0

这个问题真的没有正确答案。如果您正在学习 OOP,那么您很快就会明白这一点。我能给出的最佳建议是将您的对象分解为功能区域,然后是大小。为了可读性,您想避免使用大类,但除此之外,它基本上取决于您自己的喜好。如果您可以证明特定的设计决策是合理的,那么它可能对您有用。

于 2013-04-03T18:02:57.393 回答