单击注释气泡时应用程序崩溃

Posted

技术标签:

【中文标题】单击注释气泡时应用程序崩溃【英文标题】:Application Crashes when annotation bubble clicked 【发布时间】:2010-10-10 23:51:41 【问题描述】:

我正在从数据库创建注释。但是当我单击注释以显示气泡应用程序崩溃时。但是当我硬编码坐标并在地图上创建地标时,气泡会成功弹出。下面是我从数据库中获取并加载注释的代码。

-(void) mapView:(MKMapView *)imnMapView didAddAnnotationViews:(NSArray *)views;

    BOOL *regionSet=FALSE;


                while(sqlite3_step(compiledStatement) == SQLITE_ROW)
                
                    CLLocationCoordinate2D userCoods1;
                    NSString *lat = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 3)];
                    NSString *longg = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 4)];
                    float fLat = [lat floatValue];
                    float fLong = [longg floatValue];


    userCoods1.latitude = (CLLocationDegrees)fLat;

    userCoods1.longitude = (CLLocationDegrees)fLong;

                    if(regionSet == FALSE)
                    
                        MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userCoods1,400000,500000);
                        [mapView setRegion:region animated:YES];
                        regionSet=TRUE;
                    

                    NSString *siteName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 1)];
                    NSString *siteAddress = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 2)];


                    ParkPlaceMark *placemark=[[ParkPlaceMark alloc] initWithCoordinate1:userCoods1 title:siteName subtitle:siteAddress atm:@"ATM"];
                    pDescription = @"ATM";

                    [mapView addAnnotation:placemark];
                    [placemark release];

                

                           

            sqlite3_finalize(compiledStatement);

           

当我只是更改硬编码的 userCoords 并创建三个不同的地标时,气泡会弹出并且工作正常。请帮助我摆脱困境。提前致谢。

【问题讨论】:

【参考方案1】:

为什么不将纬度和经度值作为小数或浮点数保存在数据库中?转换它更容易。

你能用 NSLog 记录纬度和经度的值吗?它们是否转换并存储在 flat 和 flong 中?

NSLog(@"String - Latitude: %@ Longitude: %@", lat, longg);
NSLog(@"Float  - Latitude: %f Longitude: %f", fLat, fLong);

【讨论】:

Lat long 没问题。注释出现在正确的位置。唯一的问题是当我单击注释时,应用程序会因 Exec_Bad_Access 崩溃。 您确定注释的标题和副标题设置正确吗?当您触摸它们时会弹出气泡还是在此之前应用程序崩溃? 是的,我确定标题和副标题设置正确。当我点击气泡时,应用程序崩溃。应用在弹出气泡之前崩溃 也许你必须在调用函数 didAddAnnotationViews: 之前添加注释,你的 viewForAnnotation: 方法中有什么? 但是当我添加带有硬编码值的地标时它工作正常。这意味着它在正确的位置。

以上是关于单击注释气泡时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

相机崩溃[重复]

Logcat 错误描述:按钮启动使应用程序崩溃

当用户触摸注释时,无法识别的选择器崩溃

android应用程序在按钮单击时崩溃

单击以开始位置更新时应用程序崩溃

QPrinter 单击按钮时我的程序崩溃为啥?