Странная ошибка компилятора IOS: «ожидается»] «до;»использование set-ter для константы NSString в синглтоне - PullRequest
1 голос
/ 25 августа 2011

У меня самая странная ошибка! В XCode у меня есть синглтон со следующим определенным (файл: MyGizmoClass.h):

NSString            *plistPath;

NSString            *dataDomain;
NSString            *pathToChatScript;
NSString            *pathToUpdates;

и

@property (nonatomic,retain) NSString *plistPath;

@property (nonatomic,retain) NSString *dataDomain;
@property (nonatomic,retain) NSString *pathToChatScript;
@property (nonatomic,retain) NSString *pathToUpdates;

У меня есть файл Constants.h (который я #import в начале моего файла .pch), который содержит:

#define kUserPlistName  @"userPlist.plist"

#define kDataDomain @"http://www.jann.com/";
#define kPathToChatScript @"path/top/chatscript.cgi";
#define kPathToupdates @"pathtoupdates/";

Хорошо, пока, все хорошо.

Порядок в моем файле .pch таков:

#import "Constants.h"
#import "MyGizmoClass.h"    

, а затем в файле Constants.h я делаю это:

#import "FileFunctions.h"

Хорошо, тонкая настройка. Это должно работать, синглтон с 3 NSStrings. Но когда я пытаюсь сделать это в FileFunctions.h, я получаю странную ошибку в компиляторе:

FileFunctions.h

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

[myGizmoClass setPlistPath:[[myGizmoClass libraryDir]  stringByAppendingPathComponent:kUserPlistName]];

Результаты компиляции

Ожидается ']' раньше;

Что происходит? Я получаю это 3 раза ... один для setDataDomain, один для setPathToChatScript и один для setPathToUpdates. Но нет ошибки на kUserPlistName. Когда я делаю это в FileFunctions.h, тогда все хорошо:

[myGizmoClass setDataDomain: @"http://www.jann.com/"];
[myGizmoClass setPathToChatScript: @"path/top/chatscript.cgi"];
[myGizmoClass setPathToUpdates: @"pathtoupdates/"];

Результаты компиляции

Все хорошо.

Я не могу понять это. Позже (на 4 строки ниже) я делаю следующее:

[myGizmoClass setPlistPath:[[myGizmoClass libraryDir]  stringByAppendingPathComponent:kUserPlistName]];

И ТО работает! Почему подпункт kUserPlistName сработает, а kDataDomain не сработает? Это, наверное, НАСТОЛЬКО легко ... но я не могу, на всю жизнь, увидеть это!

ADDENDUM

Я обнаружил, что ВЕЗДЕ, где я использую kDataDomain, setPathToChatScript или setPathToUpdates в коде, я получаю тот же

Результаты компиляции

Ожидается ']' раньше;

Ошибка! (

Спасибо!

1 Ответ

6 голосов
/ 25 августа 2011

Не включайте точку с запятой в свои #define s.

Компилятор заменяет в точности то, что у вас есть, поэтому они будут эквивалентны:

[myGizmoClass setPathToUpdates: kPathToupdates];
[myGizmoClass setPathToUpdates: @"pathtoupdates/";]; // obvious syntax error
...