首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弧形语义问题,语义问题错误。

弧形语义问题,语义问题错误。
EN

Stack Overflow用户
提问于 2014-03-19 03:31:22
回答 2查看 1K关注 0票数 1

我下载了这个Raywenderlich教程,这部分代码有问题。

我在iOS开发方面还是新手,我不明白这意味着什么。我在网上搜索过,但这些都不是答案。

请帮帮我。

代码语言:javascript
复制
int index = [_locations indexOfObjectPassingTest:^(id obj, NSUInteger index, BOOL *stop) {
    return [[obj location] isEqual:location];
}]; 

有3个错误如下:

找到多个名为“location”的方法,结果不匹配,参数类型或属性不匹配 不兼容的块指针类型将‘__strong(^)( NSUInteger,BOOL *)’发送到'BOOL (^)(__strong id,NSUInteger,BOOL *)‘类型的参数 坏接收器类型'CGFloat‘(又称’浮子‘)

下面是完整的代码,您可以在这里找到这一行:

代码语言:javascript
复制
- (void)didTouchMarkerView:(MarkerView *)markerView 
{
    ARGeoCoordinate *tappedCoordinate = [markerView coordinate];
    CLLocation *location = [tappedCoordinate geoLocation];

    int index = [_locations indexOfObjectPassingTest:^(id obj, NSUInteger index, BOOL *stop) {
    return [[obj location] isEqual:location];
    }]; 

    if(index != NSNotFound) 
    {
        Place *tappedPlace = [_locations objectAtIndex:index];
        [[PlacesLoader sharedInstance] loadDetailInformation:tappedPlace successHanlder:^(NSDictionary *response) {
            NSLog(@"Response: %@", response);
            NSDictionary *resultDict = [response objectForKey:@"result"];
            [tappedPlace setPhoneNumber:[resultDict objectForKey:kPhoneKey]];
            [tappedPlace setWebsite:[resultDict objectForKey:kWebsiteKey]];
            [self showInfoViewForPlace:tappedPlace];
     } errorHandler:^(NSError *error) {
        NSLog(@"Error: %@", error);}];
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-08-20 06:54:12

只需按以下方式更改返回语句,

代码语言:javascript
复制
return [[(Place *)obj location] isEqual:location];

它会消除错误。

票数 2
EN

Stack Overflow用户

发布于 2014-03-19 04:36:30

正如所写的那样,您正在传入一个返回void的块,但是方法签名要求您传入一个返回BOOL的块。

只需将这一点添加到块中,就可以作为一个论点:

代码语言:javascript
复制
int index = [_locations indexOfObjectPassingTest:^BOOL(id obj, NSUInteger index, BOOL *stop) {

将来,当代码完成提示块签名时,只需按ENTER或TAB,您就不必担心记住语法.

对于名为location的多个方法,您有:

  1. 一个名为locations的属性,您通过合成的getter作为_locations访问该属性。
  2. 名为CLLocation location的实例,其作用域为方法
  3. 您还对程序做出了强有力的承诺,即存储在_locations属性中的每个对象都绝对有自己的属性或方法,称为location,它可能等于也可能不等于#2中限定范围的方法location

我可以建议您尝试一种“清洁代码”的策略,并沉溺于更长、更描述性的方法和变量名称。简单地这样做可能会突出显示您的location不匹配,并让您看看是怎么回事。

很难从发布的代码数量来推测CGFloat坏接收器类型,但我敢打赌,您可能会遇到一些NSNumber / CGFloat不匹配的情况。您可以使用[NSNumber numberWithFloat:someFloat]创建NSNumber,也可以调用[someNumber floatValue]从NSNumber中提取浮点数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22495653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档