【发布时间】:2015-08-03 22:23:41
【问题描述】:
我有一个名为 Account 的类,它有 6 个属性,其中一个属性是 c 结构。我不知道如何使用 NSCoding 来遵守结构。我将如何对 c struct 属性进行编码和解码。该结构是 app_config_t 类型。
结构
typedef struct app_config_t
{
pj_pool_t *pool;
pjsua_config cfg;
pjsua_logging_config log_cfg;
pjsua_media_config media_cfg;
pjsua_transport_config udp_cfg;
pjsua_transport_config rtp_cfg;
pj_bool_t ringback_on;
pj_bool_t ring_on;
int ringback_slot;
int ringback_cnt;
pjmedia_port *ringback_port;
int ring_cnt;
SystemSoundID ring_id;
CFRunLoopTimerRef ring_timer;
} app_config_t;
一个名为“Account”的 Objective-C 类,其属性为 App_config
#pragma mark - NSCoding
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.Username forKey:@"username"];
[aCoder encodeObject:self.Password forKey:@"password"];
[aCoder encodeObject:self.Server forKey:@"server"];
[aCoder encodeInt:self.Account_id forKey:@"Account_id"];
[aCoder encodeInt:self.Call_id forKey:@"Call_id"];
//trying to save this object, is this even correct
NSMutableData *data = [NSMutableData dataWithBytes:&_App_config length:sizeof(app_config_t)];
NSKeyedArchiver *App_config_Archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[aCoder encodeObject:App_config_Archiver forKey:@"App_config"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init])
{
self.Username = [aDecoder decodeObjectForKey:@"username"];
self.Password = [aDecoder decodeObjectForKey:@"password"];
self.Server = [aDecoder decodeObjectForKey:@"server"];
self.Account_id = [aDecoder decodeIntForKey:@"Account_id"];
self.Call_id = [aDecoder decodeIntForKey:@"Call_id"];
self.App_config = ?????????
}
return self;
}
【问题讨论】: