我下载了这个Raywenderlich教程,这部分代码有问题。
我在iOS开发方面还是新手,我不明白这意味着什么。我在网上搜索过,但这些都不是答案。
请帮帮我。
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‘(又称’浮子‘)
下面是完整的代码,您可以在这里找到这一行:
- (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);}];
}
}发布于 2014-08-20 06:54:12
只需按以下方式更改返回语句,
return [[(Place *)obj location] isEqual:location];它会消除错误。
发布于 2014-03-19 04:36:30
正如所写的那样,您正在传入一个返回void的块,但是方法签名要求您传入一个返回BOOL的块。
只需将这一点添加到块中,就可以作为一个论点:
int index = [_locations indexOfObjectPassingTest:^BOOL(id obj, NSUInteger index, BOOL *stop) {将来,当代码完成提示块签名时,只需按ENTER或TAB,您就不必担心记住语法.
对于名为location的多个方法,您有:
locations的属性,您通过合成的getter作为_locations访问该属性。CLLocation location的实例,其作用域为方法_locations属性中的每个对象都绝对有自己的属性或方法,称为location,它可能等于也可能不等于#2中限定范围的方法location我可以建议您尝试一种“清洁代码”的策略,并沉溺于更长、更描述性的方法和变量名称。简单地这样做可能会突出显示您的location不匹配,并让您看看是怎么回事。
很难从发布的代码数量来推测CGFloat坏接收器类型,但我敢打赌,您可能会遇到一些NSNumber / CGFloat不匹配的情况。您可以使用[NSNumber numberWithFloat:someFloat]创建NSNumber,也可以调用[someNumber floatValue]从NSNumber中提取浮点数。
https://stackoverflow.com/questions/22495653
复制相似问题