我在学习OOP的同时创建了一个iPhone应用程序。我有两个名为GUTimer和GUInterval的类。每个实例都需要存档到plist并在需要时单独取消存档。 我的问题是,我应该创建一个管理加载和保存这两种对象类型的管理器类。或者我应该创建单独的类,一个管理GUTimer实例的保存和加载,另一个管理GUInterval实例的保存和加载? 我还在学习OOP,这是我的评分项目所以我只想提出最好的解决方案。任何帮助,将不胜感激。 感谢。
答案 0 :(得分: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]);
}
}
答案 1 :(得分:0)
这个问题确实没有正确的答案。如果你正在学习OOP,那么你很快就会明白这一点。我能给出的最佳建议是将对象分解为功能区域,然后是大小。为了便于阅读,您希望避免使用大类,但除此之外,它基本上取决于您自己的偏好。如果你可以为某个特定的设计决定辩护,那么它可能适合你。