小编Tom*_*Tom的帖子

来自被调用方法的块和自我

好的,所以我理解如何避免self使用块保留循环,当我从一个块中的方法向嵌入更深层的方法向自己发送消息的情况如下:

- (void)methodA {
    __block MyClass *blockSelf = self;
    [someObject block:^{
        [blockSelf methodB];
    }];
}

- (void)methodB {
    ...
    [self methodC];
    ...
}

- (void)methodC {
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下[blockSelf methodB]是好的,但在发送[self methodC]methodB造成保留周期或不?在任何地方找不到答案......

memory-management objective-c objective-c-blocks

9
推荐指数
1
解决办法
1259
查看次数

如何为NSPopUpButton设置绑定

我想将NSPopUpButton的选择绑定到其中一个预定义的值.为了使它更简单,想象一个博客的应用程序:我必须BlogPostCategory实体(核心数据,但它并不重要),每个BlogPost对象都有一个链接到一个Category对象(通过category属性).

我想让用户通过NSPopUpButton更改类别,所以在我的XIB中,我有NSArrayController,它包含所有可能的类别,我将按钮的内容值绑定到:

  • 绑定到:categoriesArrayController
  • 控制器键:arrangeObjects
  • 型号键:标题

这个很好的填充弹出所有类别的标题.我也可以将Selected Object绑定到:

  • 绑定到:blogObjectController(或直接Blog对象)
  • 控制器键:选择
  • 型号关键:类别

这样可以在弹出窗口中选择正确的类别,但更改选择不会更改提交博客文章的类别,而是将帖子类别的标题更改为所选值.

鉴于上述绑定,这实际上是有意义的,所以我的下一步是将弹出窗口内容值的绑定更改为仅仅为arrangeObjects(无模型键),类似选择的对象.这项工作和更改选择确实category将博客文章更改为另一个.它不会在弹出菜单中显示类别标题,而是显示description类别(在核心数据中以类似的结尾)<Category 0x1002b6990> (entity: Category; id: .......).

这也有道理,所以我介绍了自定义NSValueTransformer(不可逆).这修复了弹出菜单中的项目描述,但随后选择不起作用.我也尝试在选定的对象绑定上使用变换器,但这只是完全禁用我的弹出窗口(可能需要反向变换,但这会使变换器大大复杂化).

我错过了一些明显的东西 - 这是否可以完全用绑定来实现,而不在控制器层上引入额外的代码?

欢迎任何欢迎!

PS:希望以上文字有道理:)

cocoa selection cocoa-bindings nspopupbutton

6
推荐指数
1
解决办法
5441
查看次数