【问题标题】:NSNotification userinfo example?NSNotification 用户信息示例?
【发布时间】:2010-11-05 04:28:30
【问题描述】:

我有一个使用 CGPoints 定位的对象数组。在我的应用程序中的某些时候,数组中的一个对象需要通知其他非数组对象它的位置。我知道 NSNotification 是最好的方法,但是对于将 CGPoint 包装和解包为 userinfo 的通知,我找不到一个像样的“发送者”和“接收者”示例。有人可以帮忙吗?

【问题讨论】:

    标签: ios objective-c xcode cocoa cocoa-touch


    【解决方案1】:

    在 Cocoa Touch(但不是 Cocoa)中,CGPoints 可以用

    包裹和展开
    + (NSValue *)valueWithCGPoint:(CGPoint)point
    - (CGPoint)CGPointValue
    

    NSValues 可以存储在作为 userinfo 参数传递的 NSDictionary 中。

    例如:

    NSValue* value = [NSValue valueWithCGPoint:mypoint];
    NSDictionary* dict = [NSDictionary dictionaryWithObject:value forKey:@"mypoint"];
    

    在您的通知中:

    NSValue* value = [dict objectForKey:@"mypoint"];
    CGPoint newpoint = [value CGPointValue];
    

    【讨论】:

    • 在Cocoa中,可以使用NSPointFromCGPoint,然后使用NSValue的valueWithPoint:和pointValue。
    • 或者您可以使用预定义的 NS_BUILD_32_LIKE_64 进行构建,在这种情况下,NSPoint 是 CGPoint 的 typedef(它总是在 64 位构建中)。
    【解决方案2】:

    与通知一起传递的用户信息对象只是一个 NSDictionary。在用户信息中传递 CGPoint 的最简单方法可能是使用 -numberWithFloat: 将 X 和 Y 坐标包装到 NSNumbers 中。然后,您可以在 userinfo 字典中使用 setObject:forKey:,例如使用 Xpos 和 Ypos 作为键。

    你可以在 NSMutableDictionary 上将它包装成一个不错的类别,使用 setFloat:forKey 之类的方法...

    【讨论】:

      猜你喜欢
      • 2017-02-27
      • 2017-04-21
      • 1970-01-01
      • 2012-01-12
      • 2014-08-16
      • 2023-04-08
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多