Tôi đã cố gắng tạo bộ mã hóa và bộ giải mã chung cho các lớp mô hình của mình. Tôi đã cố gắng tìm cách gọi phương thức mã hóa " cho tất cả các loại thuộc tính, hoặc đối tượng (NSString, NSNumber, NSArray, etc ...) và các kiểu nguyên thủy. Và tôi thấy ai đó làm như sau. Và tôi đã tự hỏi nếu điều này sẽ là một cách chính xác để làm điều đó.NSCode: bộ mã hóa và bộ giải mã cho các kiểu nguyên thủy
Thuộc tính:
@property (assign,nonatomic) int integerP;
@property (assign,nonatomic) float floatP;
@property (assign,nonatomic) BOOL boolP;
Enconder và Decoder Code:
- (void)encodeWithCoder:(NSCoder *)encoder
{
id object2 = [self valueForKey:@"integerP"];
id object3 = [self valueForKey:@"floatP"];
id object4 = [self valueForKey:@"boolP"];
[encoder encodeObject:object2 forKey:@"integerP"];
[encoder encodeObject:object3 forKey:@"floatP"];
[encoder encodeObject:object4 forKey:@"boolP"];
//[self setValue:[NSNumber numberWithInt:90] forKey:@"heightR"];
//NSLog(@"%@",[self valueForKey:@"heightR"]);
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if(self != nil)
{
id object2 = [decoder decodeObjectForKey:@"integerP"];
[self setValue:object2 forKey:@"integerP"];
id object3 = [decoder decodeObjectForKey:@"floatP"];
[self setValue:object3 forKey:@"floatP"];
id object4 = [decoder decodeObjectForKey:@"boolP"];
[self setValue:object4 forKey:@"boolP"];
}
return self;
}
Tôi đã không chắc chắn nếu điều này là một cách chính xác, hoặc nếu chương trình hoặc đối tượng khác có thể viết trong cùng một không gian bộ nhớ của các thuộc tính nguyên thủy.
Con đường tôi nghĩ là đúng::
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeInt:integerP forKey:@"integerP"];
[encoder encodeFloat:floatP forKey:@"floatP"];
[encoder encodeBool:boolP forKey:@"boolP"];
//[self setValue:[NSNumber numberWithInt:90] forKey:@"heightR"];
//NSLog(@"%@",[self valueForKey:@"heightR"]);
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if(self != nil)
{
integerP = [decoder decodeIntForKey:@"integerP"];
floatP = [decoder decodeFloatForKey:@"floatP"];
boolP = [decoder decodeBoolForKey:@"boolP"];
}
return self;
}
Tôi đã thử nghiệm và cả hai phương pháp trả lại giá trị đúng nếu các phương pháp trên là chính xác, sự khác biệt giữa trên và đây là những gì.
Tôi không hiểu. Đã có các phương pháp để mã hóa/giải mã các kiểu nguyên thủy, tại sao bạn không sử dụng chúng? Đối với tôi, phương pháp thứ hai là chính xác hơn. – Bejil