2015-09-21 31 views
0

我在NSStringFromCGRect中存储了一帧(CGRect),我以后如何检索矩形?从NSStringFromCGRect获取CGRect

[mDict setObject:NSStringFromCGRect(frame) forKey:@"frame"]; 

我需要取回数据如何?

CGRect frame = [[mDict objectForKey:@"frame"] ..?] 

是否存在方法或我必须手动解析字符串?

回答

1

我建议使用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)); 
+0

的问题是,我的数据(的CGRect)存储为一个字符串,这样我就可以对其进行加密,NSValue是不是字符串。谢谢你的尝试! –

+2

'NSValue'采用'NSCoding'。你可以创建一个'NSData'对象并加密这个 – vadian

+0

谢谢,但是我需要一个String而不是一个NSData对象。非常感谢您的快速响应! –

0

直到有人找到一个更好的解决方案,这是什么我想出了:

-(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"]; 
3

我认为你正在寻找,

CGRect frame = CGRectFromString([mDict objectForKey:@"frame"]); 
+0

这正是我所期待的!谢谢! –