2009-08-13 16 views
1

Wenn ich diese Funktion aufrufen, scheint es, einen Zeiger anstelle eines int zurückzugeben. Wenn ich NSLog den Rückgabewert versuche, bekomme ich eine Warnung "Passing Argument 1 von NSLog von inkompatiblen Zeigertyp." Und wenn NSLog läuft, stürzt es ab.Warum gibt diese Funktion einen Zeiger zurück?

Hat dies damit zu tun, dass es sich um eine statische Methode handelt? Wie kann ich einen echten Int zurückbekommen?

Ich bin mit SDK 3.0

Hier ist die Funktion in Frage:

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

Hier ist der .h Code:

#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; 

@end

Hier ist die Anfang des .m-Codes:

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

@implementation AnnasMath 

... 

ich bin mit wie folgt:

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); 

Antwort

10

Beachten Sie, dass es heißt „Argument 1“ - während die Variable, die Sie bei gesuchte Argument ist 2. Sie vorbei sind eine C-String als erste Argument von NSLog und nicht von einem NSString (der wie @"something" anstatt nur "something" geschrieben wird).

1

Die richtige Zeichenfolge ist:

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

Ich habe ein Gefühl, das man Funktion einen int zurückgibt, wie Sie wollen.

Die Kompilierungswarnung, die Sie erhalten, ist tatsächlich das String-Argument zu NSLog ... es erwartet eine Objective-C-Zeichenfolge, und Sie übergeben es eine Cstring.

fügen Sie ein @ vor der Zeichenfolge und alles sollte gut sein.

Verwandte Themen