Ошибка синтаксического анализа Obj-C - PullRequest
2 голосов
/ 29 апреля 2011

Я получаю "! Ожидаемый идентификатор или '('" рядом с #import, а также "Отсутствует контекст для реализации свойства" рядом с директивами @synthesize для переменной пространства имен и далее для метода init.

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

Я не вижу ничего плохого! Я старался изменение имени переменной с namespace to 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 ]

2 голосов
/ 29 апреля 2011

Возможно, что-то не так в SoapService.h, так как ошибка показывает его около #import. Во время компиляции препроцессор берет текст из этого файла и помещает его в этот момент. Иногда синтаксическая ошибка в .h не обнаруживается, пока не вернется к .m. Посмотри ближе к концу SoapService.h

0 голосов
/ 29 апреля 2011

Я думаю, что пространство имен является зарезервированным словом.Попробуйте изменить это на что-то другое.

...