簡體   English   中英

變量不是字符串

[英]Variable is not a string

我在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。

您使用的是iVar而非property ,請嘗試

self.lati = …

代替…

編輯:對不起,我在寫答案和同時打個電話時錯過了評論;-)

現在,將字符串保存到數據庫中就可以了,但是在下一步中,我想從數據庫中讀取字符串...一切都很好...

-(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 ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM