问题标签 [objective-c-blocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1418 浏览

iphone - 比较 switch 语句中的 ALAssetGroupType

嗨,我打电话给 ALAssetsLibrary

然后在枚举块内我想比较返回的组类型并将其添加到相关数组中。我努力了

初始日志跟踪“组 ALAssetsGroup - 名称:照片库,类型:相册,资产计数:177”

下一个日志是“资产类型 2”

但第三个日志永远不会被调用。

任何想法我做错了什么?

0 投票
2 回答
2144 浏览

objective-c - 在 Objective-C 块的实现中调用 super

在 Objective-C 块的实现中是否支持在super上调用方法?

当我在super上调用一个方法时,会抛出一个EXC_BAD_ACCESS错误,但是一旦我将这些调用从[super methodToCall]to更改为[self methodToCall]让消息向上移动到响应者链,它就可以正常工作。

在该块所在的类的实例中没有实现-methodToCall,但在超类(即 self 继承的类)中有一个。

我只是想知道为什么在块的实现中调用 super 上的方法首先是一个问题(技术上)的细节,所以我将来可以避免它。我怀疑它与如何在块中捕获变量以及有关堆栈和堆的某些内容有关,但我真的没有具体的想法。

注意:在将块存储在属性中后的几秒钟内调用块实现代码,该属性使用复制,所以我认为块的生命周期没有问题,一切看起来都很好。此外,这只是在 iPhone 设备 (3G) 上崩溃,但在 iPhone 模拟器中没有崩溃。

结果EXC_BAD_ACCESS

工作完美,实现-didRetrieveItems-errorRetrievingItems属于超类。

0 投票
2 回答
859 浏览

iphone - 基于块的动画?

在苹果文档中

他们这样提到......但我的应用程序支持 3.0 或更高版本。我是否需要使用两个单独的代码(一个用于 3.0,一个用于 4.0 以上的块)。如何做到这一点?

0 投票
3 回答
1814 浏览

iphone - 在 iPhone 中使用块设置委托

在视图控制器上,我有多个文本字段,它们都使用相同的委托。现在在委托中,代码变得非常难看,因为我必须区分所有文本字段(一堆 if/else-if 或 switch 语句)。我来了这篇文章:

文本字段委托中的块

但是从这里我仍然不明白这是如何解决问题的?这基本上不是调用一个方法并将文本传递给它,而该方法不知道文本字段给出了字符串吗?您仍然需要区分文本字段,但这次在块内(使用通常的 if(textfield == bazTextField)...)。

0 投票
1 回答
1770 浏览

objective-c - 这是一个理智的 Objective-C 块实现吗?

我想要一个 NSRegularExpression– stringByReplacingMatchesInString:options:range:withTemplate:方法的变体,它采用块而不是模板。块的返回值将用作替换值。正如您可以想象的那样,这比模板更灵活。有点像/e在 Perl 正则表达式中使用修饰符。

所以我写了一个类别来添加方法。这就是我想出的:

这是我第一次尝试在 Objective C 中玩积木。感觉有点奇怪,但似乎效果很好。不过,我有几个问题:

  1. 这似乎是实现这种方法的明智方法吗?
  2. 有没有办法使用它来实现它的内部-enumerateMatchesInString:options:range:usingBlock: ?我试过了,但无法pos从块内分配。但是如果有办法让它工作,那么传递 NSMatchingFlags 和 BOOL 并以与该方法相同的方式处理它们会很酷。可以吗?

更新

感谢 Dave DeLong 的回答,我有了一个使用块的新版本:

效果很好,谢谢!

0 投票
6 回答
64643 浏览

objective-c - 何时使用 enumerateObjectsUsingBlock 与 for

除了明显的区别:

  • enumerateObjectsUsingBlock当您需要索引和对象时使用
  • enumerateObjectsUsingBlock当您需要修改局部变量时不要使用(我错了,请参阅 bbum 的回答)

enumerateObjectsUsingBlock一般认为更好或更差的时候for (id obj in myArray)也可以工作?有哪些优点/缺点(例如,它或多或少的性能)?

0 投票
1 回答
1082 浏览

iphone - 游戏中心身份验证块不断被调用

所以,我注意到在调用 initializeGameCenter() 一次之后,每次我的应用程序回到前台时,都会调用下面的块(在 authenticateWithCompletionHandler 之后) - 这是 Game Center 的常规行为吗?(我确保放置一个断点来验证只有块被调用,而不是 initializeGameCenter 本身)

0 投票
1 回答
3161 浏览

ipad - iOS:不兼容的块指针类型

这段代码:

正在生成此编译时错误:

初始化“void (^)()”的不兼容块指针类型,预期为“void (^)(void)”

什么给出了 - 这以前曾工作过(实际上在其他项目中编译得很好 - (我刚刚检查过)。是否有我忽略的编译器/项目设置?

基础 SDK 为 4.2,部署目标为 4.2

0 投票
4 回答
17515 浏览

ios - 正确管理 addObserverForName:object:queue:usingBlock:

我对objective-c中的块还是陌生的,想知道我的伪代码是否正确。我不确定仅删除观察者是否足够,或者我是否必须调用 removeObserver:name:object:

更新:我EXC_BAD_ACCESS从这个街区收到断断续续的消息,所以这是不对的。

0 投票
2 回答
5655 浏览

objective-c - EXC_BAD_ACCESS 调用块

更新 | 我已经使用面板​​上传了一个示例项目并在此处崩溃:http ://w3style.co.uk/~d11wtq/BlocksCrash.tar.gz (我知道“选择...”按钮什么也没做,我没有尚未实施)。

更新 2 | 刚刚发现我什至不需要调用任何东西newFilePanel来导致崩溃,我只需要在语句中使用它。

这也会导致崩溃:

似乎转储到控制台的最后一件事有时是:“无法反汇编 dyld_stub_objc_msgSend_stret。”,有时是:“无法访问地址 0xa 的内存”。

我创建了自己的工作表(一个 NSPanel 子类),它试图提供类似于 NSOpenPanel/NSSavePanel 的 API,因为它将自己呈现为工作表并在完成时调用一个块。

这是界面:

以及实现里面的关键方法:

如果我的块只是一个空主体的无操作,这一切都有效。当工作表被解除时,我的块被调用。

但是,当我尝试从块内部访问面板时,我会因 EXC_BAD_ACCESS 而崩溃。例如,这会崩溃:

从调试器中不清楚原因是什么。堆栈上的第一项(零 0)只是说“??” 并且没有列出任何内容。

-endSheet:returnCode:堆栈中的下一项(1 和 2)分别是对和的调用-dismissSheet:。查看调试器中的变量,似乎没有任何问题/超出范围。

我原以为面板可能已经发布(因为它是自动发布的),但即使-retain在创建它后立即调用它也无济于事。

我执行这个错误吗?