最初我认为这会起作用,但现在我明白它不会因为artistCollection是"Artist"对象的NSMutableArray.
@interface Artist : NSObject {
NSString *firName;
NSString *surName;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,将"Artist"对象的NSMutableArray记录到磁盘的最佳方法是什么,以便我可以在下次运行应用程序时加载它们?
artistCollection = [[NSMutableArray alloc] init];
newArtist = [[Artist alloc] init];
[newArtist setFirName:objFirName];
[newArtist setSurName:objSurName];
[artistCollection addObject:newArtist];
NSLog(@"(*) - Save All");
[artistCollection writeToFile:@"/Users/Fgx/Desktop/stuff.txt" atomically:YES];
Run Code Online (Sandbox Code Playgroud)
非常感谢,这是我最好的一件事.如果"Artist"包含其他对象(Applications)的NSMutableArray(softwareOwned)的额外实例变量,我将如何扩展编码以涵盖此内容?我会将NSCoding添加到"Applications"对象,然后在编码"Artist"之前对其进行编码,还是有办法在"Artist"中指定它?
@interface Artist : NSObject {
NSString *firName;
NSString *surName;
NSMutableArray *softwareOwned;
}
@interface Application : NSObject {
NSString *appName;
NSString *appVersion;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢
加里
Ole*_*ann 18
writeToFile:atomically: 在Cocoa的集合类中仅适用于属性列表,即仅适用于包含标准对象(如NSString,NSNumber,其他集合等)的集合.
要详细说明jdelStrother的答案,您可以使用NSKeyedArchiver集合包含的所有对象可以自行归档来归档集合.要为您的自定义类实现此功能,请使其符合NSCoding协议:
@interface Artist : NSObject <NSCoding> {
NSString *firName;
NSString *surName;
}
@end
@implementation Artist
static NSString *FirstNameArchiveKey = @"firstName";
static NSString *LastNameArchiveKey = @"lastName";
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (self != nil) {
firName = [[decoder decodeObjectForKey:FirstNameArchiveKey] retain];
surName = [[decoder decodeObjectForKey:LastNameArchiveKey] retain];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:firName forKey:FirstNameArchiveKey];
[encoder encodeObject:surName forKey:LastNameArchiveKey];
}
@end
Run Code Online (Sandbox Code Playgroud)
有了这个,你可以编码集合:
NSData* artistData = [NSKeyedArchiver archivedDataWithRootObject:artistCollection];
[artistData writeToFile: @"/Users/Fgx/Desktop/stuff" atomically:YES];
Run Code Online (Sandbox Code Playgroud)
看看NSKeyedArchiver.简要说明:
NSData* artistData = [NSKeyedArchiver archivedDataWithRootObject:artistCollection];
[artistData writeToFile: @"/Users/Fgx/Desktop/stuff" atomically:YES];
Run Code Online (Sandbox Code Playgroud)
您需要在Artist类上实现encodeWithCoder:请参阅Apple的文档
Unarchiving(参见NSKeyedUnarchiver)留给读者练习:)
| 归档时间: |
|
| 查看次数: |
8547 次 |
| 最近记录: |