2010-11-08 86 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