EXC_BAD_ACCESS при выполнении операции над NSMutableArray - PullRequest
0 голосов
/ 12 января 2012

Я сейчас пытаюсь подключиться к веб-серверу и использую таблицу из него. Я поместил таблицу в массив NSMutable (он глобальный), назвал его DataSet (у меня эта часть работает). Однако, когда я пытаюсь выполнить любой тип операции над ним (Пример: количество), он выдаст мне EXC_BAD_ACCESS. Кстати, я использую xcode 4.2 с ARC, так что это не проблема управления памятью. Есть предложения?

- (void)viewDidLoad
{

    NSURL *url = [NSURL URLWithString: @"`url.com`"];
    NSData *jsonData =[NSData dataWithContentsOfURL:url];

    if(jsonData)

    {
        xmlParser = [[NSXMLParser alloc] initWithData: jsonData];
        [xmlParser setDelegate: self];
        [xmlParser parse];
    }
    NSLog(@"This is Number of elements: %@",[DataSet count]); ///<----EXC_BAD_ACCESS

 ..... //// default stuff//.....
    }



-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{


    if ([elementName isEqualToString:@"string"])
    {

        /// puts the data into Array luckyNumbers
        NSError *error;
        SBJsonParser *json = [[SBJsonParser new] init];
        DataSet = [[NSMutableArray alloc] init];
        DataSet = [json objectWithString:soapResults error:&error];

      ///  NSLog(@"%@",DataSet); /// this works

    }
}

Я не уверен, что должен, но я прочитал, что должен использовать Диагностику, поэтому я включил объекты NSZombie, Malloc guard и Malloc Stack. Они сказали, что я должен набрать это в консоли GDB info malloc-history ( расположение памяти )

Однако я не знаю, где найти место в памяти проблемы. Буду признателен за любую помощь.

Я не мог заставить это работать, поэтому я попытался использовать и NSDictionary вместо NSArray, и на удивление это работает! Вот мой обновленный код для тех, кому было интересно, что я сделал.

  • (аннулируются) viewDidLoad

{

NSURL *url = [NSURL URLWithString: @"url.com"];
NSData *jsonData =[NSData dataWithContentsOfURL:url];
DataSet = [[NSDictionary alloc] init];

если (jsonData) {

    xmlParser = [[NSXMLParser alloc] initWithData: jsonData];
    [xmlParser setDelegate: self];
    [xmlParser setShouldResolveExternalEntities:YES];
    [xmlParser parse];
}
NSLog(@"%@",DataSet.allKeys);

///// материал по умолчанию /// } }

- (void) синтаксический анализатор: (NSXMLParser *) синтаксический анализатор didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualName: (NSString *) qName

{

if ([elementName isEqualToString:@"string"])
{


    //NSLog(@"%@",DataSet);
    DataSet = [soapResults JSONValue];
    NSLog(@"%@",DataSet);

}

}

1 Ответ

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

1) В viewDidLoad добавить:

DataSet = [[NSMutableArray alloc] init];

2) В -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

if ([elementName isEqualToString:@"string"])
{
    NSError *error;
    SBJsonParser *json = [[SBJsonParser new] init];
    [DataSet addObject:[json objectWithString:soapResults error:&error]];
    [json release];
}

3) После этого в DataSet все проанализированные объекты будут сохранены

...