Я рекомендую использовать NSValue
вместо создания строкового представления. NSValue
экземпляры являются объектами и могут быть помещены в словарь
CGRect frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
NSValue *value = [NSValue valueWithRect:(NSRect)frame];
NSDictionary *dict = @{@"frame" : value};
CGRect frameBack = (CGRect)[dict[@"frame"] rectValue];
NSLog(@"%@", NSStringFromRect(frameBack));
Если вам нужна строковое представление, которое легко обратимы, вы могли бы использовать этот
CGRect frame = CGRectMake(0.0, 0.0, 100., 100.0);
NSValue *value = [NSValue valueWithRect:(NSRect)frame];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:value];
NSString *base64String = [data base64EncodedStringWithOptions:0];
NSLog(@"%@", base64String);
NSData *dataBack = [[NSData alloc] initWithBase64Encoding:base64String];
NSValue *valueBack = (NSValue *)[NSKeyedUnarchiver unarchiveObjectWithData:dataBack];
CGRect frameBack = (CGRect)[valueBack rectValue];
NSLog(@"%@", NSStringFromRect(frameBack));
Проблема заключается в том, что я должен хранить данные (CGRect) в виде строки, так что я могу зашифровать его, NSValue не является строкой. Спасибо за вашу попытку! –
'NSValue' принимает' NSCoding'. Вы можете создать объект 'NSData' и зашифровать это – vadian
Спасибо, но мне нужна строка, а не объект NSData. Большое спасибо за ваш быстрый ответ! –