2010-11-08 130 views
0

对不起,我的英文不好。我来自德国,在解析我的xml文件时遇到了一些问题。我使用最新版本的iOS SDK,包括Xcode。解析XML会导致错误

解析我的XML文件会导致一个众所周知的错误,所谓的“请求为成员‘片’的东西不是一个结构或联合”

看来,我已经忘记了什么东西,我初始化类Delgegate? 如果有人能帮助我,那将会很棒。 这是我得到的唯一错误... .. narrf

下面是一些代码,有关这个问题:

我XMLParser的.h文件中

#import <UIKit/UIKit.h> 

@class XMLAppDelegate, Slice; 

@interface XMLParser : NSObject <NSXMLParserDelegate>{ 

    NSMutableString *currentElementValue; 

    XMLAppDelegate *appDelegate; 
    Slice *aSlice; 
} 

- (XMLParser *) initXMLParser; 

@end 

这里的某些部分显示错误的.m文件:

#import "XMLParser.h" 
#import "XMLAppDelegate.h" 
#import "Slice.h" 

@implementation XMLParser 

- (XMLParser *) initXMLParser { 
    [super init]; 
    appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    return self; 
} 

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

    if([elementName isEqualToString:@"Channel"]) { 
     //Initialize the array. 
     appDelegate.slices = [[NSMutableArray alloc] init]; 
    } 
    else if([elementName isEqualToString:@"Slice"]) { 

     //Initialize the slice. 
     aSlice = [[Slice alloc] init]; 

     //Extract the attribute here. 
     aSlice.sliceID = [[attributeDict objectForKey:@"id"] integerValue]; 

     NSLog(@"Reading id value :%i", aSlice.sliceID); 
    } 

    NSLog(@"Processing Element: %@", elementName); 
} 

在尝试使用我的委托的片数组后,出现错误。

如果有人知道该怎么办,会很好, 这个小东西让我感到恶心。 ^^

回答

0

解析XML文件没有做任何事情,因为你没有得到那么多。您的程序只在运行时解析XML;你的代码还没有运行,因为它不能编译。

错误出现在编译中(这就是为什么您在Build Results中看到它的原因),并且是语法错误:您尝试使用编译器无法识别的名称作为您使用的位置的有效它。

具体做法是:

 appDelegate.slices = [[NSMutableArray alloc] init]; 

编译器不知道appDelegateslices财产;因此,它回落在C的根源上,并抱怨说你正试图通过结构访问不是结构的东西。你在你的代码中显示你导入了AppDelegate类的头文件,所以问题一定是你没有在该类的@interface中声明slices属性。

+0

嘿,谢谢你的快速回答。 – DevZarak 2010-11-08 16:37:38

+0

我检查了我的委托类的它看起来像我已经声明了切片属性:#进口 @interface XMLAppDelegate:NSObject的 { 的UIWindow *窗口; UINavigationController * navigationController; \t \t NSMutableArray * slices; } @property(nonatomic,retain)IBOutlet UIWindow * window; @property(nonatomic,retain)IBOutlet UINavigationController * navigationController; @property(nonatomic,retain)IBOutlet NSMutableArray * slices; @end – DevZarak 2010-11-08 16:38:16

+0

看起来不错,无法在注释中格式化代码,但问题仍然存在:编译器不知道您尝试使用属性的对象具有您要使用的属性。或者错误出现在你没有显示的一行代码中(我注意到你问题中的错误信息是“切片”而不是“切片”),或者你实际上没有在真实代码中导入标题,或者你实际上并没有在头文件中声明属性。我现在正倾向#1。请注意,您可以双击构建错误以转到问题代码。 – 2010-11-08 17:04:42