我在Xcode中创建了一个字符串,如下所示:
@property (nonatomic, retain) NSString *lati;
我也合成了它......
现在在我的视图中,我通过这个功能得到了我的理解:
- (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 String没有正确设置,但我不知道为什么......这是我的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。
答案 0 :(得分:3)
您使用的是iVar
而不是property
,只需尝试
self.lati = …
,而不是...
编辑:对不起,我在写答案的同时错过了评论并同时拨打了电话; - )
答案 1 :(得分: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 ....