IOS奇怪的编译器错误:"expected']'之前;' 在单例中使用set-ter表示NSString常量

Jan*_*ann 1 sdk singleton constants nsstring ios

我有一个最奇怪的错误!在Xcode中我有一个单例,定义如下(文件是:) MyGizmoClass.h:

NSString            *plistPath;

NSString            *dataDomain;
NSString            *pathToChatScript;
NSString            *pathToUpdates;
Run Code Online (Sandbox Code Playgroud)

@property (nonatomic,retain) NSString *plistPath;

@property (nonatomic,retain) NSString *dataDomain;
@property (nonatomic,retain) NSString *pathToChatScript;
@property (nonatomic,retain) NSString *pathToUpdates;
Run Code Online (Sandbox Code Playgroud)

我有一个Constants.h文件(我#import早在我的.pch文件中),其中包含:

#define kUserPlistName  @"userPlist.plist"

#define kDataDomain @"http://www.jann.com/";
#define kPathToChatScript @"path/top/chatscript.cgi";
#define kPathToupdates @"pathtoupdates/";
Run Code Online (Sandbox Code Playgroud)

好的,到目前为止,这么好.

我的.pch文件中的顺序是这样的:

#import "Constants.h"
#import "MyGizmoClass.h"    
Run Code Online (Sandbox Code Playgroud)

然后在Constants.h文件中我这样做:

#import "FileFunctions.h"
Run Code Online (Sandbox Code Playgroud)

好的,很好的设置.这应该工作,一个有3个NSStrings的单身人士.但是当我尝试这样做时,FileFunctions.h我在编译器中遇到一个奇怪的错误:

FileFunctions.h

[myGizmoClass setDataDomain: kDataDomain];
[myGizmoClass setPathToChatScript: kPathToChatScript];
[myGizmoClass setPathToUpdates: kPathToupdates];

[myGizmoClass setPlistPath:[[myGizmoClass libraryDir]  stringByAppendingPathComponent:kUserPlistName]];
Run Code Online (Sandbox Code Playgroud)

编译结果

预期']'之前;

到底是怎么回事?我得到这个3次...一个用于setDataDomain,一个用于setPathToChatScript,一个用于setPathToUpdates.但没有错误kUserPlistName.当我这样做时,FileFunctions.h一切都很顺利:

[myGizmoClass setDataDomain: @"http://www.jann.com/"];
[myGizmoClass setPathToChatScript: @"path/top/chatscript.cgi"];
[myGizmoClass setPathToUpdates: @"pathtoupdates/"];
Run Code Online (Sandbox Code Playgroud)

编译结果

一切都很好.

我无法弄清楚这一点.后来(这下面4行)我做了以下几点:

[myGizmoClass setPlistPath:[[myGizmoClass libraryDir]  stringByAppendingPathComponent:kUserPlistName]];
Run Code Online (Sandbox Code Playgroud)

有效的!为什么要削弱kUserPlistName工作,但kDataDomain不会?这可能很容易......但我不能,因为我的生活,看到它!

附录

我发现无论我在哪里使用kDataDomain,setPathToChatScript或者setPathToUpdates在代码中我都得到了相同的结果

编译结果

预期']'之前;

错误!:(

谢谢!

jtb*_*des 6

不要在你的#defines中加入分号.

编译器完全替换你所拥有的,所以这些是等价的:

[myGizmoClass setPathToUpdates: kPathToupdates];
[myGizmoClass setPathToUpdates: @"pathtoupdates/";]; // obvious syntax error
Run Code Online (Sandbox Code Playgroud)