Xcode Objective-C простой массив в массиве - PullRequest
2 голосов
/ 01 февраля 2012

Iam новый в Objective-C

Я интегрировал один Array в другой Array, он работает

Мой вопрос: я часто использую Row *row = [[Row alloc] init];, но я думаю,Неправильно использовать этот код слишком часто.Пожалуйста, посмотрите на мой код, там вы найдете 3 раза код.

мой XMLPARSER.h

@interface XMLParser : NSObject <NSXMLParserDelegate> {

    // veränderlicher String
    NSMutableString *currentString;

    BOOL storingCharacters;

    //unveränderliche Strings
    NSString *user;
    NSString *score;
    NSString *idValue;
    NSString *responseCode;

    int index;

    //Klasse von NSArray, objekte können hinzugefügt und verändert werden, keine feste Anzahl von Elementen
    NSMutableArray *rows;
}

@property (nonatomic, retain) NSMutableString *currentString;
@property (nonatomic, retain) NSString *user;
@property (nonatomic, retain) NSString *score;
@property (nonatomic, retain) NSString *idValue;
@property (nonatomic, retain) NSString *responseCode;
@property (nonatomic)  BOOL storingCharacters;

@property (nonatomic, retain) NSMutableArray *rows;

- (void)parseXMLFile:(NSString *)pathToFile;
- (void)print;

@end


@interface Row: NSObject{
    NSString *user;
    NSString *score;
    NSMutableArray *ids;
    int index;
}

@property (nonatomic, retain) NSString *user;
@property (nonatomic, retain) NSString *score;
@property (nonatomic, retain) NSMutableArray *ids;
@property (nonatomic) int index;
@end

мой XMLPArser.c

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


    if ([elementName isEqualToString:kName_response]) {

    }else if ([elementName isEqualToString:kName_responseCode]) {
        self.responseCode=[[NSString alloc] initWithString: currentString];
    }else if ([elementName isEqualToString:kName_rows]) {

    }else if ([elementName isEqualToString:kName_row]) {
        Row *row  = [[Row alloc] init];

        row.user=self.user;      
        row.score=self.score;

        [self.rows insertObject:row atIndex:index];
        index=index+1;
        [row release];


    }else if ([elementName isEqualToString:kName_user]) {
        self.user=[[NSString alloc] initWithString: currentString];
    }else if ([elementName isEqualToString:kName_score]) {
        self.score=[[NSString alloc] initWithString: currentString];
    }
    else if ([elementName isEqualToString:kName_extra]) {
         Row *row  = [[Row alloc] init];
        NSLog(@"indexwert:%@",row.index);
         row.index = 0;
        [row release];
    }
    else if ([elementName isEqualToString:kName_ids]) {
        self.idValue=[[NSString alloc] initWithString: currentString];
        Row *row  = [[Row alloc] init];
        row.ids = [[NSMutableArray alloc] init];
        [row.ids insertObject:idValue atIndex:row.index];

        NSLog(@"The number!!!! %@ in %@ ",idValue, [row.ids objectAtIndex:row.index]); //it works

        row.index = row.index+1;

       // NSLog(@"hallo %@",idValue); //it works 
        [row.ids release];
        [row release];


    }

    storingCharacters = NO;
}

Правильно ли мой код?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Отвечая на ваш вопрос: нет проблем с многократным использованием Row *row = [[Row alloc] init]; в вашем коде.

Вы выделяете несколько Row объектов, и не все ваши ветви (из вашего if / else if) требуют Row, поэтому вы не можете легко абстрагировать его.

Да, есть другие проблемы (например, в случае kName_extra при выделении ресурсов не используется Row), как указывали другие, но это не ваш вопрос, и вы разберетесь с ним по мере развития кода .

0 голосов
/ 01 февраля 2012

Почему бы просто не поставить Row * row = [[Row alloc] init];перед запуском вашего if (и отпустите его после if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...