Почему эта функция возвращает указатель?

Когда я вызываю эту функцию, кажется, что она возвращает указатель вместо int. Когда я пытаюсь вернуть NSLog возвращаемое значение, я получаю предупреждение «Передача аргумента 1 NSLog из несовместимого типа указателя». И если NSLog запускается, он падает.

Это связано с тем, что это статический метод? Как я могу вернуть реальный int?

Я использую SDK 3.0

Вот рассматриваемая функция:

+(int) getZoomFromExtent: (CLLocationCoordinate2D)bottomLeft
            withTopRight:(CLLocationCoordinate2D)topRight
             withPixelsX:(int)pixelsX 
             withPixelsY:(int)pixelsY 
         withMapContents: (RMMapContents*) contents;

Вот код .h:

#import <Foundation/Foundation.h>
#import <math.h>
#import <CoreLocation/CLLocation.h>
#import "RMTile.h"
#import "RMMapContents.h"

@interface AnnasMath : NSObject {}

+(CLLocationCoordinate2D) normalizePixelCoords:(CLLocationCoordinate2D) point;
+(RMTile)tileWithCoordinate:(CLLocationCoordinate2D)point andZoom:(int)zoom;
+(NSArray *)getTileArrayWithUpperLeft:(CLLocationCoordinate2D)upperLeft andLowerRight: (CLLocationCoordinate2D)lowerRight fromZoom:(int)bottomZoom toZoom:(int)topZoom;
+(int)getTileCountWithUpperLeft:(CLLocationCoordinate2D)upperLeft andLowerRight:(CLLocationCoordinate2D)lowerRight fromZoom:(int)bottomZoom toZoom:(int)topZoom;
+(int) getZoomFromExtent: (CLLocationCoordinate2D)bottomLeft 
             withTopRight:   (CLLocationCoordinate2D)topRight
              withPixelsX:(int)pixelsX
              withPixelsY:(int)pixelsY
          withMapContents: (RMMapContents*) contents;

@конец

Вот начало кода .m:

#import "AnnasMath.h"
#import <Foundation/Foundation.h>
#import <math.h>
#import "TileWrapper.h"

@implementation AnnasMath

...

Я использую его следующим образом:

int zoom = [AnnasMath getZoomFromExtent:[[extent objectForKey:@"bottomLeft"]coordinate] 
               withTopRight:[[extent objectForKey:@"topRight"]coordinate]
                            withPixelsX:300
                            withPixelsY:300 
                        withMapContents:t.mapVC.mapView.contents];

NSLog("About to set the zoom to %i", zoom);

person Andrew Johnson    schedule 13.08.2009    source источник


Ответы (3)


Обратите внимание, что он говорит «аргумент 1», тогда как переменная, на которую вы смотрите, является аргументом 2. Вы передаете строку C в качестве первого аргумента NSLog, а не NSString (которая записывается как @"something", а не просто "something").

person Chuck    schedule 13.08.2009

Правильная строка:

NSLog(@"About to set the zoom to %i", zoom);
person Jordan    schedule 13.08.2009

У меня такое чувство, что ваша функция возвращает int, как вы хотите.

Предупреждение о компиляции, которое вы получаете, на самом деле является строковым аргументом для NSLog... оно ожидает строку Objective-C, а вы передаете ей Cstring.

добавьте @ перед строкой, и все должно быть хорошо.

person Akusete    schedule 13.08.2009