【问题标题】:Parsing XML causes Error解析 XML 导致错误
【发布时间】:2010-11-08 16:12:23
【问题描述】:

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

解析我的 xml 文件会导致一个众所周知的错误,称为“在非结构或联合的情况下请求成员 'Slices'”

似乎我忘记了什么,初始化我的 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);
}

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

如果有人知道该怎么做,那就太好了, 这件小事让我恶心。 ^^

【问题讨论】:

    标签: objective-c xml cocoa parsing


    【解决方案1】:

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

    错误出现在编译中(这就是您在构建结果中看到它的原因),并且是语法错误:您尝试使用编译器无法识别为对您使用它的位置有效的名称.

    具体来说:

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

    编译器不知道appDelegate 有一个slices 属性;因此,它退回到它的 C 根并抱怨你正在尝试对不是结构的东西进行结构访问。您在代码中显示您导入了 AppDelegate 类的标头,因此问题一定是您没有在该类的 @interface 中声明 slices 属性。

    【讨论】:

    • 我检查了我的 Delegate 类,看起来我已经声明了 slices 属性:#import @interface XMLAppDelegate : NSObject { UIWindow *window; UINavigationController *navigationController; NSMutableArray *slices; @property (nonatomic, 保留) IBOutlet UIWindow *window; @property (nonatomic, 保留) IBOutlet UINavigationController *navigationController; @property(非原子,保留)IBOutlet NSMutableArray *slices; @end
    • 看起来不错,无法在 cmets 中格式化代码,但问题仍然存在:编译器不知道您尝试使用的属性的对象具有您尝试的属性采用。错误出现在您没有显示的代码行上(我注意到您的问题中的错误消息是“切片”而不是“切片”),或者您实际上没有在真实代码中导入标头,或者您实际上并未在真实代码的标头中声明该属性。我目前倾向于#1。请注意,您可以双击构建错误以转到问题代码。
    • 错误显示在以下行:appDelegate.slices = [[NSMutableArray alloc] init]; ,在 XMLParser.m 我的错,对不起.. 我的意思是“切片”,而不是“切片”。只是上面写错了。我不明白为什么它不能使用 slices 属性。
    • 我也是。你所展示的一切看起来都是正确的。尝试用 Clang 编译;它比 GCC 具有更好的诊断能力。
    • "@property(非原子,保留)IBOutlet NSMutableArray *slices;"我怀疑您是否希望这是一个 IBOutlet。如果这会导致您遇到的问题,我会感到惊讶,但它却很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多