ios自定义块无法为arm64编译

时间:2015-02-01 12:36:19

标签: ios compilation block arm64

从armv7s更改为arm64时,我无法编译自定义块。我怎么能解决这个问题呢?谢谢。 这是我的代码:



//typedef NSInteger (^ActionSheetPickerNumberOfRowsBlock)

(ActionSheetPicker *picker);
    ActionSheetPickerNumberOfRowsBlock numberOfRows = ^(ActionSheetPicker *picker) {
        return 29;
    };




1 个答案:

答案 0 :(得分:1)

29默认类型为int,因此编译器会根据需要推断块的返回类型int,而不是NSIntegerNSInteger与armv7中的int相同,但不是arm64。

您可以从this table看到:

  • int在armv7和arm64中都是32位
  • NSInteger在armv7中为32位,在arm64中为64位
  • long在armv7中为32位,在arm64中为64位(与NSInteger相同)

所以你可以这样做:

return 29l;

return (NSInteger)29;

或在块文字中明确指定返回类型:

^NSInteger(ActionSheetPicker *picker) {
    return 29;
};