【问题标题】:Spika-iOS : "incompatible block pointer types"Spika-iOS:“不兼容的块指针类型”
【发布时间】:2014-09-26 02:41:17
【问题描述】:

我已经下载了适用于 iOS 和 Android 的“Spika”脚本,但遇到了以下问题。尝试编译时出现以下错误:

Incompatible block pointer types sending 'int (^)(ModelMessage *__strong, ModelMessage *__strong)' to parameter of type 'NSComparator' (aka 'NSComparisonResult (^)(__strong id, __strong id)')

我试图通过将其更改为 NSComparisonResult 来解决此问题,但似乎无法理解问题所在。

代码如下:

NSMutableArray *removeTarget = [[NSMutableArray alloc] init];

for(int i = 0; i < [result count] ; i++){

    ModelMessage *message = [result objectAtIndex:i];

    if(message.valid == NO)
        [removeTarget addObject:message];

}

for(int ii = 0; ii < [removeTarget count] ; ii++){
    [result removeObject:[removeTarget objectAtIndex:ii]];
}

NSArray *sortedAry = [result sortedArrayUsingComparator:^(ModelMessage *a, ModelMessage *b) {
    return a.modified> b.modified;
}];

int fetchNum = PagingMessageFetchNum;
if(fetchNum > sortedAry.count)
    fetchNum = sortedAry.count;

return sortedAry;

//return [sortedAry subarrayWithRange:NSMakeRange(0, fetchNum)];
}

问题出在:

NSArray *sortedAry = [result sortedArrayUsingComparator:^(ModelMessage *a, ModelMessage *b) {
    return a.modified> b.modified;

任何帮助将不胜感激。谢谢大家。

【问题讨论】:

  • 你运行的是 ios 7+ 吗?
  • 嘿@ViralNarshana 谢谢你的建议,我现在已经解决了这个问题

标签: ios xcode nsarray


【解决方案1】:

您不应该像上面的代码那样返回 BOOL 结果。 结果必须是NSComparisonResult 类型,即枚举

enum {
  NSOrderedAscending = -1,
  NSOrderedSame,
  NSOrderedDescending
};

在你的情况下,排序块应该是这样的

NSArray *sortedAry = [result sortedArrayUsingComparator:^(ModelMessage *a, ModelMessage *b) {
    if(a.modified<b.modified)
        return NSOrderedAscending;
    else if(a.modified>b.modified)
        return NSOrderedDescending;
    else 
        return NSOrderedSame;
}];

【讨论】:

  • 嘿@Astoria,你的回答有效。虽然真正的问题是我运行的是 Xcode 6 的测试版。一旦我更新到 GM,它就会自行解决。我会投票赞成你的答案,因为它实际上是正确的。
猜你喜欢
  • 2012-04-22
  • 1970-01-01
  • 2015-11-28
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多