我在NSStringFromCGRect
中存储了一帧(CGRect
),我以后如何检索矩形?从NSStringFromCGRect获取CGRect
[mDict setObject:NSStringFromCGRect(frame) forKey:@"frame"];
我需要取回数据如何?
CGRect frame = [[mDict objectForKey:@"frame"] ..?]
是否存在方法或我必须手动解析字符串?
我在NSStringFromCGRect
中存储了一帧(CGRect
),我以后如何检索矩形?从NSStringFromCGRect获取CGRect
[mDict setObject:NSStringFromCGRect(frame) forKey:@"frame"];
我需要取回数据如何?
CGRect frame = [[mDict objectForKey:@"frame"] ..?]
是否存在方法或我必须手动解析字符串?
我建议使用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) CGRectFromNStringFromCGRect: (NSString *) string {
NSString *newString = [string stringByReplacingOccurrencesOfString:@"{" withString:@""];
newString = [newString stringByReplacingOccurrencesOfString:@"}" withString:@""];
newString = [newString stringByReplacingOccurrencesOfString:@" " withString:@""];
NSArray *array = [newString componentsSeparatedByString:@","];
if ([array count]==4) {
return CGRectMake([array[0] floatValue], [array[1] floatValue], [array[2] floatValue], [array[3] floatValue]);
} else {
return CGRectZero;
}
}
使用这样:
CGRect frame = [self CGRectFromNStringFromCGRect:[mDict objectForKey:@"frame"];
我认为你正在寻找,
CGRect frame = CGRectFromString([mDict objectForKey:@"frame"]);
这正是我所期待的!谢谢! –
的问题是,我的数据(的CGRect)存储为一个字符串,这样我就可以对其进行加密,NSValue是不是字符串。谢谢你的尝试! –
'NSValue'采用'NSCoding'。你可以创建一个'NSData'对象并加密这个 – vadian
谢谢,但是我需要一个String而不是一个NSData对象。非常感谢您的快速响应! –