【问题标题】:How to call NSArray's enumerateObjectsUsingBlock in lldb?如何在lldb中调用NSArray的enumerateObjectsUsingBlock?
【发布时间】:2022-01-12 04:42:47
【问题描述】:

我想在调试时调用 enumerateObjectsUsingBlock 打印数组中的每个对象。 但是 lldb 似乎不支持 block ?有没有办法让它工作?

(lldb) expr -- [self.choiceQuestion.allNewRecommenedItems enumerateObjectsUsingBlock:void ^(id obj,NSUInteger index,BOOL* stop){NSLog(@"%@",obj);}]
error: <user expression 9>:1:76: expected '(' for function-style cast or type construction
[self.choiceQuestion.allNewRecommenedItems enumerateObjectsUsingBlock:void ^(id obj,NSUInteger index,BOOL* stop){NSLog(@"%@",obj);}]

【问题讨论】:

    标签: ios xcode lldb


    【解决方案1】:

    如果我将您的示例放在源文件中 - 以消除表达式解析器可能出现的问题 - 我会得到与您显示的相同的语法错误。所以显然这不是合法的块语法。但是如果我尝试(只是删除void):

    [myArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@", obj); }];
    

    成功编译。不出所料,该表达式也适用于表达式求值器。

    我怀疑由于编译器从其主体的返回值推断块的类型,因此不允许返回类型规范,但您必须找到更熟悉块语法细节的人来说明当然。

    【讨论】:

    • 感谢 Jim @JimIngham ,您可以在 lldb 中执行此命令来打印数组吗?
    • 好的,这条线将在 lldb 中工作,感谢 Jim 的建议。 (lldb) expr -- [self.choiceQuestion.allNewRecommenedItems enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {(void)NSLog(@"11");}]
    【解决方案2】:

    感谢 JimIngham 的回答。 lldb 中打印数组的具体答案如下:

    (lldb) expr -- [self.choiceQuestion.allNewRecommenedItems  enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {(void)NSLog(@"11");}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      相关资源
      最近更新 更多