AutoRelease, мешающий обработке данных - PullRequest
0 голосов
/ 04 января 2012

Итак, я работаю с этого учебного пособия и пытаюсь встроить в свое приложение XML-ридер с помощью собственного API. Я пытаюсь прочитать XML и продолжаю получать эту ошибку:

*** -[CFString release]: message sent to deallocated instance 0x68675a0

Я не освобождаю и не освобождаю ничего, я позволяю AutoRelease обрабатывать все это. Вот мой призыв к методу:

self.dtContact = [DTContactParser loadDTC];   

if (_dtContact != nil) {
    for (DTContact *dtc in _dtContact.contacts) {
        NSLog(@"%@", dtc.description);
}
}
NSLog(@"done");

Я получаю свою ошибку в конце этого, когда он отправляет NSLog(@"done");, затем выдает ошибку.

Вот загрузка DTContactParserDTC

+ (DTCXMLResponse *)loadDTC {

NSString *filePath = [self dataFilePath:FALSE];
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData 
                                                       options:0 error:&error];
if (doc == nil) { return nil; }

DTCXMLResponse *dtcxmlr = [[DTCXMLResponse alloc] init];
NSArray *dtcontacts = [doc.rootElement elementsForName:@"DetectiveContact"];
for (GDataXMLElement *dtcontact in dtcontacts) {

    // Let's fill these in!
    NSString *description;
    int dtcid;

    // Name
    NSArray *descriptions = [dtcontact elementsForName:@"description"];
    if (descriptions.count > 0) {
        GDataXMLElement *firstName = (GDataXMLElement *) [descriptions objectAtIndex:0];
        description = firstName.stringValue;
    } else continue;

    // Level
    NSArray *ids = [dtcontact elementsForName:@"idDetectiveContact"];
    if (ids.count > 0) {
        GDataXMLElement *firstID = (GDataXMLElement *) [ids objectAtIndex:0];
        dtcid = firstID.stringValue.intValue;
    } else continue;

    DTContact *dtcontact = [[DTContact alloc] initWithName:description dtId:dtcid];
    [dtcxmlr.contacts addObject:dtcontact];


return nil;

} }

А вот и DTCконтакт:

    #import "DTContact.h"

@implementation DTContact
@synthesize description = _description;
@synthesize dtId = _dtId;

- (id)initWithName:(NSString *)description dtId:(int)dtId{

    if ((self = [super init])) {
        self.description = description;
        self.dtId = dtId;
    }    
    return self;

}

@ конец

Любая помощь будет принята с благодарностью.

1 Ответ

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

Используя этот ответ на отдельный вопрос , я отключил ARC в моей библиотеке GDATAXML, и он перестает вызывать ошибку.

...