2011-04-29 48 views
2

我得到了「#import旁邊的預期標識符或'('」,以及命名空間變量onward和init方法的@synthesize指令旁邊的「Missing context for property implementation」 。Obj-C解析錯誤

SoapService.h

#import "SoapDelegate.h" 
@interface SoapService : NSObject 
{ 
    NSString* _serviceUrl; 
    NSString* _namespace; 
    NSString* _username; 
    NSString* _password; 
    NSDictionary* _headers; 
    BOOL _logging; 
    id<SoapDelegate> _defaultHandler; 
} 

@property (retain) NSString* serviceUrl; 
@property (retain) NSString* namespace; 
@property (retain) NSString* username; 
@property (retain) NSString* password; 
@property (retain) NSDictionary* headers; 
@property BOOL logging; 
@property (nonatomic, retain) id<SoapDelegate> defaultHandler; 

- (id) initWithUrl: (NSString*) url; - (id) initWithUsername: (NSString*) serviceUsername andPassword: (NSString*) servicePassword; 

@end 

SoapService.m

#import "SoapService.h" 

@implementation SoapService 

@synthesize serviceUrl = _serviceUrl; 
@synthesize namespace = _namespace; 
@synthesize logging = _logging; 
@synthesize headers = _headers; 
@synthesize defaultHandler = _defaultHandler; 
@synthesize username = _username; 
@synthesize password = _password; 

- (id) init { 

    if ((self = [super init])) { 
     self.serviceUrl = nil; 
     self.namespace = nil; 
     self.logging = NO; 
     self.headers = nil; 
     self.defaultHandler = nil; 
     self.username = nil; 
     self.password = nil; 
    } 
    return self; 
} 

- (id) initWithUrl: (NSString*) url { 

    if((self = [self init])) { 
     self.serviceUrl = url; 
    } 
    return self; 
} 

- (id) initWithUsername: (NSString*) serviceUsername andPassword: (NSString*) servicePassword { 

    if ((self = [self init])) { 
     self.username = serviceUsername; 
     self.password = servicePassword; 
    } 
    return self; 
} 

-(void)dealloc { 

    [_serviceUrl release]; 
    [_namespace release]; 
    [_username release]; 
    [_password release]; 
    [_headers release]; 
    [_defaultHandler release]; 
    [super dealloc]; 
} 

@end 

SoapDelegate.h

#import "SoapFault.h" 

@protocol SoapDelegate <NSObject> 
- (void) onload: (id) value; 
@optional 
- (void) onerror: (NSError*) error; 
- (void) onfault: (SoapFault*) fault; 
@end 

我看不到任何錯誤!我嘗試 將名稱空間中的變量名稱從 更改爲namespacexx,但沒有 成功。

SoapFault.h

#import "TouchXML.h" 

@interface SoapFault : NSObject { 
    NSString* faultCode; 
    NSString* faultString; 
    NSString* faultActor; 
    NSString* detail; 
    BOOL hasFault; 
} 

@property (retain, nonatomic) NSString* faultCode; 
@property (retain, nonatomic) NSString* faultString; 
@property (retain, nonatomic) NSString* faultActor; 
@property (retain, nonatomic) NSString* detail; 
@property BOOL hasFault; 

+ (SoapFault*) faultWithData: (NSMutableData*) data; 
+ (SoapFault*) faultWithXMLDocument: (CXMLDocument*) document; 
+ (SoapFault*) faultWithXMLElement: (CXMLNode*) element; 

@end 

TouchXML.h

#import "CXMLDocument.h" 
#import "CXMLElement.h" 
#import "CXMLNode.h" 
#import "CXMLNode_XPathExtensions.h" 

我可以走得更遠,但想 狀態,我和Xcode 4.0.2 和編譯以前版本的Xcode編譯器沒有提出這些語義問題。這導致我認爲 認爲有一些語法或 表示法已被棄用。

CXMLDocument.h

#import "CXMLNode.h" 

enum { 
    CXMLDocumentTidyHTML = 1 << 9 
}; 

@class CXMLElement; 

@interface CXMLDocument : CXMLNode { 
    NSMutableSet *nodePool; 
} 

- (id)initWithXMLString:(NSString *)inString options:(NSUInteger)inOptions error:(NSError **)outError; 
- (id)initWithContentsOfURL:(NSURL *)inURL options:(NSUInteger)inOptions error:(NSError **)outError; 
- (id)initWithData:(NSData *)inData options:(NSUInteger)inOptions error:(NSError **)outError; 

//- (NSString *)characterEncoding; 
//- (NSString *)version; 
//- (BOOL)isStandalone; 
//- (CXMLDocumentContentKind)documentContentKind; 
//- (NSString *)MIMEType; 
//- (CXMLDTD *)DTD; 

- (CXMLElement *)rootElement; 

//- (NSData *)XMLData; 
//- (NSData *)XMLDataWithOptions:(NSUInteger)options; 

//- (id)objectByApplyingXSLT:(NSData *)xslt arguments:(NSDictionary *)arguments error:(NSError **)error; 
//- (id)objectByApplyingXSLTString:(NSString *)xslt arguments:(NSDictionary *)arguments error:(NSError **)error; 
//- (id)objectByApplyingXSLTAtURL:(NSURL *)xsltURL arguments:(NSDictionary *)argument error:(NSError **)error; 

//- (id)XMLStringWithOptions:(NSUInteger)options; 

@end 

CXMLNode.h

#import <Foundation/Foundation.h> 

#include <libxml/tree.h> 

typedef enum { 
    CXMLInvalidKind = 0, 
    CXMLElementKind = XML_ELEMENT_NODE, 
    CXMLAttributeKind = XML_ATTRIBUTE_NODE, 
    CXMLTextKind = XML_TEXT_NODE, 
    CXMLProcessingInstructionKind = XML_PI_NODE, 
    CXMLCommentKind = XML_COMMENT_NODE, 
    CXMLNotationDeclarationKind = XML_NOTATION_NODE, 
    CXMLDTDKind = XML_DTD_NODE, 
    CXMLElementDeclarationKind = XML_ELEMENT_DECL, 
    CXMLAttributeDeclarationKind = XML_ATTRIBUTE_DECL, 
    CXMLEntityDeclarationKind = XML_ENTITY_DECL, 
    CXMLNamespaceKind = XML_NAMESPACE_DECL, 
} CXMLNodeKind; 

@class CXMLDocument; 

// NSXMLNode 
@interface CXMLNode : NSObject { 
    xmlNodePtr _node; 
} 

- (CXMLNodeKind)kind; 
- (NSString *)name; 
- (NSString *)stringValue; 
- (NSUInteger)index; 
- (NSUInteger)level; 
- (CXMLDocument *)rootDocument; 
- (CXMLNode *)parent; 
- (NSUInteger)childCount; 
- (NSArray *)children; 
- (CXMLNode *)childAtIndex:(NSUInteger)index; 
- (CXMLNode *)previousSibling; 
- (CXMLNode *)nextSibling; 
//- (CXMLNode *)previousNode; 
//- (CXMLNode *)nextNode; 
//- (NSString *)XPath; 
//- (NSString *)localName; 
//- (NSString *)prefix; 
//- (NSString *)URI; 
//+ (NSString *)localNameForName:(NSString *)name; 
//+ (NSString *)prefixForName:(NSString *)name; 
//+ (CXMLNode *)predefinedNamespaceForPrefix:(NSString *)name; 
- (NSString *)description; 
- (NSString *)XMLString; 
- (NSString *)XMLStringWithOptions:(NSUInteger)options; 
//- (NSString *)canonicalXMLStringPreservingComments:(BOOL)comments; 
- (NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error; 

- (NSString*)_XMLStringWithOptions:(NSUInteger)options appendingToString:(NSMutableString*)str; 
@end 
+2

請發佈SoapService.h文件。 – magma 2011-04-29 13:18:37

+0

按照@magma的說法,然後,該文件如何正確命名? – Eiko 2011-04-29 13:21:36

+0

@ user273565,「SoapFault.h」丟失。不要在此添加它作爲評論;相反,在您自己的原始問題上單擊「編輯」,然後添加缺少的文件,就像@Evan現在爲您做的那樣。而且,如果SoapFault.h導入另一個.h文件,請添加它。 – magma 2011-04-29 13:36:49

回答

2

有可能出錯的SoapService.h因爲錯誤顯示附近的#import它。在編譯時,預處理器從這個文件中獲取文本並將其放在此處。有時.h中的語法錯誤沒有找到,直到它回到.m。看看附近的結尾SoapService.h

+0

我正在通過.h文件進行消除和反向跟蹤以獲取解析錯誤的來源。我同意問題不在於編譯器提出問題的文件中。謝謝你的回覆。 – user273565 2011-04-30 18:37:05

0

我認爲這個名字空間是一個保留字。嘗試將其改爲別的東西。

+1

不,「命名空間」不是Obj-C中的保留字。 – 2011-04-29 13:21:22

+0

你說得對。我的錯 – Johan 2011-04-29 13:22:33