EXC_BAD_ACCESS проблема на iPhone и симуляторе - PullRequest
0 голосов
/ 12 апреля 2011

Я получаю EXC_BAD_ACCESS вне моего собственного кода. В настоящее время мой код получает URL через объект shareURLCache, а затем запускает URL-соединение. Как только я покидаю метод, который запускает соединение URL, я нажимаю EXC_BAD_ACCESS. Я пытался использовать инструменты, чтобы найти зомби, и я проанализировал утечки памяти, но также не появился. На данный момент я полностью застрял.

Вот код, который загружает URL-адрес и запускает соединение URL-адреса

- (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
       fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"At new location: %@",newLocation);

    MKCoordinateRegion region = 
            MKCoordinateRegionMakeWithDistance([newLocation coordinate], 750, 750);

    [mapView setRegion:region animated:YES];
    [location stopUpdatingLocation];

    CLLocationCoordinate2D coord = [newLocation coordinate];
    NSURL *url = [urlCache getReccomendationForUID:@"12345" atLat:coord.latitude 
                                         atLon:coord.longitude forCategories:nil];


    // Create the request.
    NSURLRequest *request = [NSURLRequest requestWithURL:url
                                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                                     timeoutInterval:60.0];


// create the connection with the request
// and start loading the data
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
    if (connection) {
        // Create the NSMutableData to hold the received data.
        // xmlData is an instance variable declared elsewhere.
        xmlData = [[NSMutableData alloc]init];
    } else {
        NSLog(@"Could not create connection");
    }
}

Метод из sharedURLCache, который возвращает URL

-(NSURL *)getReccomendationForUID:(NSString *)u atLat:(double)lat atLon:(double)lon forCategories:(NSArray *)cat
{
    if(remote) {
        NSMutableString *categories = [[NSMutableString alloc]init];
        for(NSString *s in cat) {
            [categories appendString:@"&cat="];
            [categories appendString:s];
        }
        NSString *s = [NSString stringWithFormat:@"%@/recommendation?uid=%@&psw=null&lat=%f&lon=%f?%@",
                   apiRoot,u,lat,lon,categories];
        [categories release];
        return [NSURL URLWithString:s];
    } else {
        return [[NSBundle mainBundle] URLForResource:@"XMLTest" withExtension:@"xml"];;
    }
}

Ответы [ 2 ]

0 голосов
/ 20 января 2012

У меня была такая же проблема с памятью

[mapView setRegion:region animated:YES];

Этот метод не любит быстрых обновлений ...

0 голосов
/ 12 апреля 2011

Просто начните с комментирования кода и запуска, чтобы увидеть, можете ли вы заставить ошибку mem исчезнуть, затем начните добавлять код снова, пока он не появится, тогда у вас есть лучшее представление, в чем проблема. это может быть где угодно в вашем коде, так как у вас там есть несколько объектов, которые не были переданы, например, 'Место'.

[location stopUpdatingLocation];
...