[英]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.