2012-10-15 2 views
0

У меня есть файл XML, и я Раед всю информацию в XML-файл и сохранить в массиве,Получение массива из другого класса Objective-C

вот мой starDidElement файл для хранения в массиве:

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

if ([elementName isEqualToString:@"Presentation"]) { 
    NSLog(@"user element found – create a new instance of User class..."); 
    app.presentationArray = [[NSMutableArray alloc] init]; 
    thePresentation = [[Presentation alloc] init]; 
    thePresentation.pLabel = [attributeDict objectForKey:@"label"]; 
    NSLog(@"PLabel: %@", thePresentation.pLabel); 

}else if ([elementName isEqualToString:@"slides"]) { 
    NSLog(@"Slides"); 

    thePresentation.slides = [NSMutableArray array]; 

и в моем заголовке меня

Presentation thePresentation; 

могли бы вы помочь мне inpelement это

Спасибо заранее

Edit:

Presentation *aPresentation = [app.presentationArray objectAtIndex:0]; 
NSLog(@"Presentation is: %@ and it's Slide Count is: %d",aPresentation.pLabel, aPresentation.slides.count); 

Slide *aSlide = [aPresentation.slides objectAtIndex:0]; 
NSLog(@"Slide Label is: %@", aSlide.sLabel); 

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btn setTitle:[NSString stringWithString:aSlide.sLabel] forState:UIControlStateNormal]; 
btn.frame = rect; 
[btn setTag:i]; 
[btn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
[imageView addSubview:btn]; 

Затем бревно

[788: c07] Презентация является: (нуль), и это слайд-граф является: 0 [788: c07] Слайдовая метка: (null)

+0

Вы делаете это по существу так же, как вы могли бы сделать это в Java , –

+0

@HotLicks вы можете написать свой код в части ответа, пожалуйста, – AntonMac

ответ

0

Добавить открытый метод в вашем представленииController, после того как ваш синтаксический анализ xml завершит вызов этого общедоступного метода, значит вы сообщаете свой viewController данные готовы & Обновление интерфейса.

Вы можете использовать appDelegate, чтобы сообщить viewController, что данные готовы, так как appDelegate будет иметь экземпляр вашего viewController.

EDIT: Вы можете иметь следующее:

//in viewController.h 
- (void) viewFillUp; 

//in viewController.m 
-(void)viewFillUp 
{ 
     Slide *aSlide = [thePresentation.slides objectAtIndex:0]; 
     NSLog(@"Slide Label is: %@", aSlide.sLabel); 

     UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [btn setTitle:[NSString stringWithString:aSlide.sLabel] forState:UIControlStateNormal]; 
     btn.frame = rect; 
     [btn setTag:i]; 
     [btn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
     [imageView addSubview:btn]; 
} 

//in appDelegate.h 
- (void) parsingDone; 

//in appDelegate.m 
- (void) parsingDone 
{ 
    //suppose ur viewController instance is self.viewController 
    [self.viewController viewFillUp] 
} 
+0

, но у меня есть презентация thePresentation; , не могли бы вы написать код, который вы имеете в виду? – AntonMac

+0

где ур начальныйDidElement код написан ..? я имею в виду, в каком классе или viewController – vishy

+0

в моем XMLParser – AntonMac

2

Что происходит, когда вы делаете это таким образом:

Presentation *aPresentation = [app.presentationArray objectAtIndex:0]; 
NSLog(@"Presentation is: %@ and it's Slide Count is: %d",aPresentation.pLabel, aPresentation.slides.count); 

Slide *aSlide = [aPresentation.slides objectAtIndex:0]; 
    NSLog(@"Slide Label is: %@", aSlide.sLabel); 

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [btn setTitle:[NSString stringWithString:aSlide.sLabel] forState:UIControlStateNormal]; 
    btn.frame = rect; 
    [btn setTag:i]; 
    [btn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
    [imageView addSubview:btn]; 
+0

сначала у меня была ошибка с незаявленным идентификатором приложения, что я добавил AppDelegate * app; в моем файле заголовка, но у меня есть ошибка Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: «*** - [NSPlaceholderString initWithString:]: аргумент nil ' – AntonMac

+0

[788: c07] Презентация: (null) и это слайд Граф: 0 [788: c07] Слайдовая метка: (null) – AntonMac

+0

Это означает, что в вашем 'app.presentationArray' ничего нет. В него не добавляются презентации. –

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