i parsing a XML file. when i adding values into array, the array still null, i don't know the reason. may be reason is that i using this array in two classes. there is .h files
xmlparser.h
#import <UIKit/UIKit.h>
@class SightsTableViewController, Sight;
@interface XMLParser : NSObject {
NSMutableString *currentElementValue;
NSMutableArray *allSights;
NSMutableArray *Arr;
SightsTableViewController *sightsDelegate;
Sight *aSight;
}
- (XMLParser *) initXMLParser;
- (XMLParser *) arrayResult;
@property (nonatomic, retain) NSMutableArray *allSights;
@end
SightsTableViewController.h
#import <UIKit/UIKit.h>
@class SightsTableViewController, SightsDetailController;
@interface SightsTableViewController : UITableViewController <UITableViewDelegate>, UITableViewDataSource> {
IBOutlet UITableView *sightsTableView;
NSMutableArray *allSights;
NSMutableArray *Arr;
SightsDetailController *sightsDetailController;
SightsTableViewController *sightsDelegate;
}
@property (nonatomic, retain) NSMutableArray *allSights;
@property (nonatomic, retain) NSMutableArray *Arr;
@property (nonatomic, retain) SightsDetailController *sightsDetailController;
@end
and .m files
i posting only methods which i using arrays. xmlparser.m
#import "XMLParser.h"
#import "SightsTableViewController.h"
#import "Sight.h"
@implementation XMLParser
@synthesize allSights;
- (XMLParser *) arrayResult {
Arr = [[NSMutableArray alloc] init];
[Arr addObject:@"fisrt"];
[Arr addObject:@"two"];
[Arr addObject:@"three"];
[Arr addObject:@"four"];
[Arr addObject:@"five"];
NSLog(@"%@", Arr);
return Arr;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Sights"]) {
//Initialize the array.
sightsDelegate.allSights = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Sight"]) {
//Initialize the sight.
aSight = [[Sight alloc] init];
//Extract the attribute here.
aSight.sightID = [[attributeDict objectForKey:@"id"] integerValue];
NSLog(@"Reading id value :%i", aSight.sightID);
}
NSLog(@"Processing Element: %@", elementName);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"Sights"])
return;
//There is nothing to do if we encounter the Sight element here.
//If we encounter the Sight element howevere, we want to add the sight object to the array
// and release the object.
if([elementName isEqualToString:@"Sight"]) {
//adding values
[allSights addObject:aSight];
[aSight release];
aSight = nil;
}
else
[aSight setValue:currentElementValue forKey:elementName];
[currentElementValue release];
currentElementValue = nil;
}
- (void) dealloc {
[Arr release];
[aSight release];
[allSights release];
[super dealloc];
}
@end
SightsTableViewController.m
#import "SightsTableViewController.h"
#import "SightsDetailController.h"
#import "XMLParser.h"
#import "Sight.h"
@implementation SightsTableViewController
@synthesize sightsDetailController, allSights, Arr;
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [[NSURL alloc] initWithString:@"http://onsnab.ru/sights.xml"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];
//Set delegate
[xmlParser setDelegate:parser];
//Start parsing the XML file.
BOOL success = [xmlParser parse];
if(success)
NSLog(@"No Errors");
else
NSLog(@"Error Error Error!!!");
[[XMLParser alloc] arrayResult];
//showing NULL :(
NSLog(@"%@", sightsDelegate.allSights);
self.navigationItem.title = @"Sights";
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [sightsDelegate.allSights count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
NSString *cellValue = [sightsDelegate.allSights objectAtIndex:indexPath.row];
cell.text = cellValue;
// Set up the cell
return cell;
}
- (void)dealloc {
[sightsDelegate release];
[sightsDetailController release];
[super dealloc];
}
@end
- (void)arrayResultand- (void)parser:(NSXMLParser *)parser didStartElement:namespaceURI:qualifiedName:attributes:). Also, please, don't type code as a mess - some formatting and it will be easier to understand your code (and more chances for you, that somebody will help).Arr? If so, you never pass it back and forth. Just because it has the same name in two places doesn't make it the same object.Arrin other class. as you ca see i call a class[[XMLParser alloc] arrayResult];to test. it's work. the problem withallSightsarray, i still cant call it in other class. (