从NSDictionary访问数据

时间:2012-06-08 15:20:31

标签: objective-c ios

我正在使用以下方法来访问有关对象的数据。第一个NSLog显示所有数据。第二个NSLog显示“帧”数据,其出现为:NSRect:{{168,102},{5,5}}

如何从NSRect访问第一组坐标,然后从第一对坐标获取横坐标?

-(void) moveTheShape:(NSTimer*)timer
{
    NSDictionary *userInfo = [timer userInfo];
    NSLog(@"Info:  %@",userInfo);
    //Info:  <Shape: 0x68b6c30; frame = (151 352; 5 5); layer = <CALayer: 0x68b6c00>>
    NSDictionary *frame = [userInfo  valueForKey:@"frame"];
    NSLog(@"frame: %@", frame);
    //NSRect: {{168, 102}, {5, 5}}
}

正确的解决方案:

-(void) moveTheShape:(NSTimer*)timer
{
Shape *userInfo = [timer userInfo];
NSLog(@"Info:  %@",userInfo);
CGPoint origin = userInfo.frame.origin;
NSLog(@"result: %f", origin.x);
}

4 个答案:

答案 0 :(得分:2)

CGRect存储为NSValue 您需要从CGRectValue

获取NSValue

使用以下

NSValue *value = [userInfo valueForKey:@"frame"];
CGRect rect = [value CGRectValue];

答案 1 :(得分:1)

如果我对userInfo类型的预测是正确的:

-(void) moveTheShape:(NSTimer*)timer
{
    Shape *userInfo = [timer userInfo];
    CGPoint origin = userInfo.frame.origin;
    // Do stuff with origin
}

答案 2 :(得分:0)

int abscissa = frame.origin.x;会得到你的x值。您可以使用frame.size.width和frame.size.height来获取大小。

答案 3 :(得分:0)

哈,abscissa,我今天的新词!

无论如何,你的意思是CGRect,因为iPhone使用的是CoreGraphics,而不是所有UIKit矩形的FoundationKit。

至于访问struct的内部变量(CGPoint和CGSize是准确的),只需在将帧存储到CGRect var之后使用常规的旧点表示法,如下所示:

NSValue *value = [userInfo objectForKey:@"frame"];
CGRect frameVar = [value CGRectValue];
frameVar.origin = CGPointMake(someCoord, someOtherCoord);