typedef в заголовочном файле не подхватывается xcode

У меня есть typedef в файле A.h, и я импортирую этот файл A.h в B.h, который использует тот же typedef.

В течение долгого времени все работало нормально, но теперь он ломается, жалуясь, что не распознает typedef и выдает ошибку «Ожидается тип» в xcode, даже если xcode выделяет typedef во втором файле, что означает, что он знает, что они определены еще куда.

если я вручную переопределю этот typedef, ошибка исчезнет. но я получаю предупреждение о том, что я переопределяю typedef и что это функция C11.

Я попытался удалить производные данные, но ошибка остается. Похоже, xcode пытается найти typedef перед вставкой файлов импорта. Любая подсказка? Я использую xcode 4.6

//WebService.h
#import <Foundation/Foundation.h>
#import "AppDelegate.h"

@interface WebService : NSObject


typedef void(^loginUserWithUserNameandPaswordCompletion)(NSDictionary *, NSError*);

+(void)createUserWithName:(NSString*)name
                 andEmail:(NSString*)email
              andPassword:(NSString*)password
             onCompletion:(loginUserWithUserNameandPaswordCompletion) complete;
@end

//DataCenter.h
#import <Foundation/Foundation.h>
#import "WebService.h"
#import "AppDelegate.h"

typedef void(^loginUserWithUserNameandPaswordCompletion)(NSDictionary *, NSError*);
@interface DataCenter : NSObject

+(void) logInUserWithEmail:(NSString*) email
               andPassword:(NSString*)password
              onCompletion:(loginUserWithUserNameandPaswordCompletion)complete;

@end

person Mehdi    schedule 21.04.2013    source источник
comment
Можете ли вы разместить свою декларацию?   -  person iphonic    schedule 21.04.2013
comment
typedef в заголовочном файле не подхватывается xcode - конечно, это не так, Xcode - это не компилятор.   -  person    schedule 21.04.2013
comment
@ H2CO3 XCode делает что-то вроде ворса. Если он обнаружит, что у вас есть ошибка компиляции, он пометит вашу ошибку и заблокирует сборку. Я обновлю объявления.   -  person Mehdi    schedule 21.04.2013
comment
@iphonic Я обновил пост своим кодом.   -  person Mehdi    schedule 21.04.2013


Ответы (2)


Попробуйте поставить typedef перед @interface в WebService.h.

person gberginc    schedule 21.04.2013
comment
Я попробовал, и это не сработало... еще одно замечание, в AppDelegate.h я также импортирую DataCenter.h, это треугольный импорт - person Mehdi; 21.04.2013
comment
Старайтесь избегать циклических зависимостей! Используйте предварительные объявления классов вместо импорта. Для этого удалите эти #import ваших собственных классов и поставьте @class <ClassName> перед @interface. Затем поместите импорт в файлы реализации. Вы также можете попробовать поместить typedef в отдельный заголовочный файл и импортировать его во все другие заголовочные файлы, которым требуется этот typedef. - person gberginc; 21.04.2013
comment
Это правильное решение, не повторять typedef в обоих заголовках. - person Peter Hosey; 22.04.2013

используется @class, как упоминалось gberginc

person Mehdi    schedule 24.05.2013