2012-02-01 1 views
2

Иам нового в Objective-CXcode 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

Я не знаю, в чем проблема (помимо странного форматирования кода!), Пожалуйста, уточните подробнее. –

ответ

0

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

1

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

Вы выделения множественного объекта, а не все ваши. ветви (зависание, если/иначе, если) требуют , так что вы не можете легко абстрактный его.

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

Смежные вопросы