Несовместимые типы в инициализации? - PullRequest
2 голосов
/ 08 марта 2011

Почему я получаю «несовместимые типы при инициализации» в следующем коде?

NSString *latString = [NSString stringWithFormat:@"%@", @"-44.4349773"];
    NSString *lngString = [NSString stringWithFormat:@"%@", @"-33.2779787"];
    double latDouble = [latString doubleValue];
    double lngDouble = [lngString doubleValue];
    double roundDouble = 0;
    NSNumber *mylngDoubleNumber;
    if(latDouble == 0 && lngDouble == 0) {
        NSNumber *mylngDoubleNumber = 0;
    }else{
double tempDble = [self calcDiffDistance:latDouble withPostLng:lngDouble ]; <-- incompatible types...
NSNumber *mylngDoubleNumber = [NSNumber numberWithDouble:tempDble];



-(double)calcDiffDistance:(double )postLat withPostLng:(double )lon1 {

NSLog(@"beginning CLLocationDegrees in calcDiff in UsersPosts");
CLLocationDegrees lat = self.lastKnownLocation.coordinate.latitude;
CLLocationDegrees lng = self.lastKnownLocation.coordinate.longitude;
NSLog(@"finsished CLLocationDegrees in calcDiff in UsersPosts");

NSLog(@"beginning location1 in calcDiff in UsersPosts");
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:postLat longitude:lon1];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:-44.4343 longitude:-34.977];
NSLog(@"finsished CLLocationDegrees in calcDiff in UsersPosts");


NSLog(@"beginning location release in calcDiff in UsersPosts");
double target = [location1 distanceFromLocation:location2];
//int myInt = (int)ceil(target);
target = target/1609.334;
[location1 release];
[location2 release];
NSLog(@"finsished location release in calcDiff in UsersPosts");

return target;

}

.h код ////////////////////////////////

                                                      #import <UIKit/UIKit.h>
    #import "PostTableCustomCellController.h"
    #import "LoadMoreResultsTableViewCell.h"
    #include <stdlib.h>
    #import "CLController.h"
    #import <CoreLocation/CoreLocation.h>


    @class PostDetailViewController;

    @interface TransactionsTableViewController : UITableViewController <CLControllerDelegate, UIScrollViewDelegate, UITableViewDelegate, UITableViewDataSource, NSFetchedResultsControllerDelegate> {
        IBOutlet UITableView *transactionsTableView;
        NSMutableArray *postsArray;
        PostDetailViewController *postDetailViewController;
        UITableView *transTableView;
        Boolean *isFetchingData;
        int *webServiceAllCount;
        NSCalendar *calendar;
        NSTimer *minuteTimer;
        NSTimer *regionsTimer;
        Boolean *blockRefresh;
        CLLocation *lastKnownLocation;
    }

    @property (nonatomic, retain) CLLocation *lastKnownLocation;
    @property Boolean *blockRefresh;
    @property (nonatomic, assign) Boolean *isFetchingData;
    @property (nonatomic, retain) LoadMoreResultsTableViewCell *loadMoreResultsCell;
    @property (nonatomic, assign) NSTimer *minuteTimer;
    @property (nonatomic, assign) NSTimer *regionsTimer;


    -(double)calcDiffDistance:(double )postLat withPostLng:(double )lon1;
    - (NSString *)dateDiff:(NSString *)origDate;
    - (void)updateTime:(NSTimer *)timer;
    - (void)updateRegions;
    -(void)newLocationUpdate:(CLLocation *)location;
    -(void)newError:(NSString *)text;
    @property (nonatomic, retain) UITableView *transTableView;
    @property (nonatomic, retain) NSMutableArray *postsArray;
    @property (nonatomic, retain) PostDetailViewController *postDetailViewController;

    @end

Ответы [ 4 ]

3 голосов
/ 08 марта 2011

Лучшее предположение, если мы не видим контекст, в котором компилируется этот код, это то, что вы не импортируете заголовочный файл, который объявляет метод calcDiffDistance:withPostLng:.

Кроме того, переменная экземпляра типа int* почти наверняка не то, что вы имели в виду; Вы действительно хотите указатель на int?!

Имя этого метода тоже немного грубое:

-(double)calcDiffDistance:(double )postLat withPostLng:(double )lon1 {

Как насчет чего-то вроде этого:

-(double)calculateDistanceFromLatitude:(double)lat longitude:(double)long

1 голос
/ 08 марта 2011

Просьба проверить тип данных переменных latDouble и lngDouble.Это должно быть double.

0 голосов
/ 08 марта 2011

@ jgervin: хорошая новость в том, что я попробовал ваш код в моем проекте, он работает без ошибок вообще ...

это отчет в моей консоли отладчика:

[2745: 207] начало CLLocationDegrees в calcDiff в UsersPosts [2745: 207] законченные CLLocationDegrees в calcDiff в UsersPosts [2745: 207] начало местоположения1 в calcDiff в UsersPosts [2745: 207] законченные CLLocationDegrees в calcDiff в UsersPosts [2745: 207] начало выпуска местоположения в calcDiff в UsersPosts [2745: 207] Законченный релиз местоположения в calcDiff в UsersPosts [2745: 207] _ _: 79893040

Я только что добавил ваш код:

-(double)calcDiffDistance:(double )postLat withPostLng:(double )lon1 {

    NSLog(@"beginning CLLocationDegrees in calcDiff in UsersPosts");
//  CLLocationDegrees lat = self.lastKnownLocation.coordinate.latitude;  // not used
//  CLLocationDegrees lng = self.lastKnownLocation.coordinate.longitude; // not used
    NSLog(@"finsished CLLocationDegrees in calcDiff in UsersPosts");

    NSLog(@"beginning location1 in calcDiff in UsersPosts");
    CLLocation *location1 = [[CLLocation alloc] initWithLatitude:postLat longitude:lon1];
    CLLocation *location2 = [[CLLocation alloc] initWithLatitude:-44.4343 longitude:-34.977];
    NSLog(@"finsished CLLocationDegrees in calcDiff in UsersPosts");


    NSLog(@"beginning location release in calcDiff in UsersPosts");
    double target = [location1 distanceFromLocation:location2];
    //int myInt = (int)ceil(target);
    target = target/1609.334;
    [location1 release];
    [location2 release];
    NSLog(@"finsished location release in calcDiff in UsersPosts");

    return target;
}

вызывая это откуда-то из моего кода:

NSString *latString = [NSString stringWithFormat:@"%@", @"-44.4349773"];
NSString *lngString = [NSString stringWithFormat:@"%@", @"-33.2779787"];
    double latDouble = [latString doubleValue];
    double lngDouble = [lngString doubleValue];
    double roundDouble = 0; // not used
    NSNumber *mylngDoubleNumber; // not used
    if(latDouble == 0 && lngDouble == 0) {
        NSNumber *mylngDoubleNumber = 0; // not used
    }else{
        double tempDble = [self calcDiffDistance:latDouble withPostLng:lngDouble ]; //
        NSNumber *mylngDoubleNumber = [NSNumber numberWithDouble:tempDble];
        NSLog(@"____:%d", mylngDoubleNumber);
    }   

с этим в .h файле:

#include <stdlib.h> //
#import <CoreLocation/CoreLocation.h> //

и

-(double)calcDiffDistance:(double )postLat withPostLng:(double )lon1;

поэтому ваша ошибка компилятора - поиск в другом месте, а не ошибка метода объявления плохо то, что я не знаю где ...

и ... ваш метод каждый раз возвращает разные (неожиданные) значения ... как здесь:

_ _ : 100906736

_ _ : 100786912

_ _ : 79891648

...

пс

Полагаю, вы импортировали правильную платформу "CoreLocation.framework" в свой проект, конечно ...

0 голосов
/ 08 марта 2011

Вы передаете здесь latDouble и lngDouble в calcDiffDistance методе. И тип для этих аргументов не совпадает с типами аргументов метода. См. Оператор declration.lngDouble должно быть double.

...