0

我在 Xcode 中创建了一个字符串,如下所示:

@property (nonatomic, retain) NSString *lati;

我也合成了。。。

现在在我的 viewLoad 中,我通过这个函数得到了我的纬度:

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation {
    int degrees = newLocation.coordinate.latitude;
    double decimal = fabs(newLocation.coordinate.latitude - degrees);
    int minutes = decimal * 60;
    double seconds = decimal * 3600 - minutes * 60;
    lati = [NSString stringWithFormat:@"%d° %d' %1.4f\"",
                 degrees, minutes, seconds];
    //latLabel.text = lat;
    degrees = newLocation.coordinate.longitude;
    decimal = fabs(newLocation.coordinate.longitude - degrees);
    minutes = decimal * 60;
    seconds = decimal * 3600 - minutes * 60;
    longi = [NSString stringWithFormat:@"%d° %d' %1.4f\"",
                   degrees, minutes, seconds];
}

后来我想将一些字符串保存到我的 slite3 数据库中,但我得到了一个 Bad_Access,因为我的 Lati 字符串没有正确设置,但我不知道为什么......这是我的 SaveToDB 方法:

if (sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK) {
    NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO DATEN(download, upload, ping, comment, date, network, latitude, longitude) VALUES (\"%@\", \"%@\", \"%@\",\"%@\", \"%@\",\"%@\", \"%@\",\"%@\")",topDownloadLabel.text, topUploadLabel.text, pingLabel.text, Comment, string, WlanOrUmts, lati, longi];

我得到了 Bad_Access。

4

2 回答 2

3

您使用的是iVar而不是property,请尝试

self.lati = …

而是……</p>

编辑:对不起,我在写答案和打电话的同时错过了评论;-)

于 2012-10-01T15:54:46.610 回答
0

现在一切都很好,将我的字符串保存到数据库中,但在我的下一步中,我想从我的数据库中读取字符串......一切都很好......

-(NSMutableArray *) daten{
daten = [[NSMutableArray alloc] initWithCapacity:100];
@try {
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSString *dbPath = [self getDBPath];
    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: %s", sqlite3_errmsg(db));

    }


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

        while (sqlite3_step(sqlStatement)==SQLITE_ROW) {
            Daten * infos = [[Daten alloc] init];
            infos.download = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,1)];
            infos.upload = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)];
            infos.ping = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,3)];
            infos.comment = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,4)];
            infos.date = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,5)];
            infos.type = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,6)];
            infos.lati = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,7)];
            infos.longi = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,8)];


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

    return daten;
}
}

但是如果我想将这些值传递给我的 prepareForSegue 方法中的下一个视图,我会得到一个 Bad_Access:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"showDetails"])
{
    @try {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
        Daten *date = [[Daten alloc] init];
        date = [daten objectAtIndex: storyIndex];
        UINavigationController *navController = (UINavigationController*)[segue destinationViewController];
        DetailViewController *eventsController = [navController topViewController];
        [eventsController setDownload:date.download];
        [eventsController setUpload:date.upload];
        [eventsController setPing:date.ping];
        [eventsController setComment:date.comment];
        [eventsController setNetwork:date.type];
        //NSLog(@"The content of arry is%@",daten);
        [eventsController setDate:date.date];
        UINavigationController *navigationController = segue.destinationViewController;
        DetailViewController *DetailsViewController = [[navigationController viewControllers] objectAtIndex:0];
        DetailsViewController.delegate = self;

    }
    @catch (NSException *exception) {
        NSLog(@"%@", exception);
    }
    @finally {

    }
        }
}

但仅在 date.date 或 date.type....

于 2012-10-02T09:36:53.313 回答