Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 添加从当前位置到NSMutableArray的距离_Xcode_Ios5_Cllocation - Fatal编程技术网

Xcode 添加从当前位置到NSMutableArray的距离

Xcode 添加从当前位置到NSMutableArray的距离,xcode,ios5,cllocation,Xcode,Ios5,Cllocation,我试图将距离当前位置的距离加载到数组中,但似乎遗漏了一些内容。My TableView仅显示?,仅当我的currentLoc不工作,但我的NSLog显示正确的位置时,才应显示。请帮忙 更新:必须已删除我的重新加载tableView,修复了?问题,但现在我只行驶了0.00公里。仍然缺少一些东西。在LocationManager中,我的currentLoc是正确的,但是当我试图计算数组中的距离时,我丢失了它 #import "AuthorViewController.h" #import "Auth

我试图将距离当前位置的距离加载到数组中,但似乎遗漏了一些内容。My TableView仅显示?,仅当我的currentLoc不工作,但我的NSLog显示正确的位置时,才应显示。请帮忙

更新:必须已删除我的重新加载tableView,修复了?问题,但现在我只行驶了0.00公里。仍然缺少一些东西。在LocationManager中,我的currentLoc是正确的,但是当我试图计算数组中的距离时,我丢失了它

#import "AuthorViewController.h"
#import "Author.h"
#import <sqlite3.h>


@implementation AuthorViewController
@synthesize theauthors;
@synthesize currentLoc;

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
currentLoc = newLocation;

if (newLocation.horizontalAccuracy <= 100.0f) {
    [locMgr stopUpdatingLocation];
}
NSLog(@"Lat: %f, Long: %f", currentLoc.coordinate.latitude, currentLoc.coordinate.longitude);

[self.tableView reloadData];
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSString *msg = [[NSString alloc]initWithString:@"Error obtaining location"];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:msg delegate:nil cancelButtonTitle:@"Done" otherButtonTitles:nil];
[alert show];
}


#pragma mark - View lifecycle

- (void)viewDidLoad
{
[self barList];
[super viewDidLoad];

NSLog(@"Lat2: %f, Long2: %f", currentLoc.coordinate.latitude, currentLoc.coordinate.longitude);
}

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

locMgr = [[CLLocationManager alloc] init];
locMgr.delegate = self;
[locMgr startUpdatingLocation];
}


#pragma mark - Table view data source

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

// Return the number of rows in the section.
return [self.theauthors count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
int rowCount = indexPath.row;

Author *author = [self.theauthors objectAtIndex:rowCount];



cell.textLabel.text = author.barName;

if (currentLoc == nil) {
    cell.detailTextLabel.text = [NSString stringWithFormat:@"?"];
}else
{
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%.02f km", author.cachedDist];
}


return cell;
}


-(NSMutableArray *) barList{
theauthors = [[NSMutableArray alloc] init];
@try {
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"TulsaBars.sqlite"];
    BOOL success = [fileMgr fileExistsAtPath:dbPath];
    if(!success)
    {
        NSLog(@"Cannot locate database file '%@'.", dbPath);
    }
    if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
    {
        NSLog(@"An error has occured: %@", sqlite3_errmsg(db));

    }


    const char *sql = "SELECT * FROM  TulsaBars";
    sqlite3_stmt *sqlStatement;
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"Problem with prepare statement:  %@", sqlite3_errmsg(db));
    }else{

        while (sqlite3_step(sqlStatement)==SQLITE_ROW) {
            Author * author = [[Author alloc] init];
            author.barName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,1)];
            author.barAddress = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)];
            author.barState = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 5)];
            author.barLat = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 8)];
            author.barLong = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 9)];
            author.cachedDist = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 10)];

            CLLocation *barLocation = [[CLLocation alloc] initWithLatitude:[author.barLat doubleValue] longitude:[author.barLong doubleValue]];
            CLLocationDistance distancekm = [currentLoc distanceFromLocation: barLocation]/1000;
            NSString *distanceString = [[NSString alloc] initWithFormat: @"%f", distancekm];
            author.cachedDist = distanceString;

            [theauthors addObject:author];
        }
    }
    sqlite3_finalize(sqlStatement);
}
@catch (NSException *exception) {
    NSLog(@"Problem with prepare statement:  %@", sqlite3_errmsg(db));
}
@finally {
    sqlite3_close(db);

    return theauthors;
}
}

@end
当需要在表视图中重新绘制数据时,请确保调用[tableView reloadData]


您也可以尝试此答案中概述的扩展技术:

谢谢,我一定是在什么地方删除了我的重新加载表。这解决了问题?问题是,但是现在所有的东西都只有0.00公里。你的当前LOC ivar有可能为零吗?我想这就是问题所在,我只是不明白为什么。我的Lat和Long NSLog显示正确,但我的Lat2和Long NSLog显示0渲染前是否更新了locationManager?如果有,自上次更新以来您是否调用了reloadData?如果没有,我一定是错过了它。我想这实际上是我加载数组的方式。