Objective c 解析XML会导致错误

Objective c 解析XML会导致错误,objective-c,xml,cocoa,parsing,Objective C,Xml,Cocoa,Parsing,对不起,我的英语不好。我来自德国,在解析xml文件时遇到一些问题。我使用最新版本的iOS SDK,包括Xcode 解析xml文件会导致一个众所周知的错误,称为“请求非结构或联合中的成员“切片” 似乎我忘记了什么,初始化我的Delgegate类? 如果有人能帮我渡过难关就太好了。 这是我唯一的错误。。。narrf 以下是一些与此问题相关的代码: 我的XMLParser.h文件 #import <UIKit/UIKit.h> @class XMLAppDelegate, Slice;

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

解析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
在我尝试使用代理的切片数组后,会出现错误

如果有人知道该怎么做就好了,
这个小东西让我恶心^^

解析XML文件没有做任何事情,因为您还没有做到这一点。您的程序仅在运行时解析XML;您的代码尚未运行,因为它未编译

错误出现在编译中(这就是为什么您会在生成结果中看到它),并且是一个语法错误:您试图使用一个编译器无法识别为对您使用它的位置有效的名称

具体而言:


编译器不知道
appDelegate
具有
slices
属性;因此,它依赖于它的C根,并抱怨说您正在尝试对非结构的内容进行结构访问。您在代码中显示为AppDelegate类导入了头,因此问题一定是您没有在该类的
@interface

中声明
slices
属性。我检查了我的委托类,似乎声明了slices属性:#import@interface XMLAppDelegate:NSObject{UIWindow*窗口;UINavigationController*导航控制器;NSMutableArray*切片;}@property(非原子,保留)IBOutlet UIWindow*窗口;@property(非原子,保留)IBOutlet UINavigationController*导航控制器;@property(非原子,保留)IBMOutlet NSMutableArray*slices;@endIt看起来不错,无法在注释中格式化代码,但问题仍然存在:编译器不知道您尝试使用的对象的属性与您尝试使用的属性相同。或者错误出现在未显示的代码行上(我注意到您问题中的错误消息是“切片”而不是“切片”),或者您没有在实际代码中实际导入标头,或者您没有在实际代码中实际声明标头中的属性。我目前倾向于使用#1。请注意,您可以双击生成错误以转到问题代码。错误显示在行中:appDelegate.slices=[[NSMutableArray alloc]init];在XMLParser中。我的错,对不起..我是说“切片”,而不是“切片”。我只是在上面写错了。我也不明白为什么它不能使用切片属性。我也是。您显示的所有内容看起来都是正确的。试着用Clang编译;它比GCC有更好的诊断。“@property(nonatomic,retain)IBOutlet NSMutableArray*切片我怀疑你是否希望这是一个IBOutlet。如果这导致了你的问题,我会感到惊讶,但它很奇怪。
#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);
}
        appDelegate.slices = [[NSMutableArray alloc] init];