Ошибка при использовании протоколов - PullRequest
0 голосов
/ 20 июля 2011

Пожалуйста, используйте следующий код:

 //
//  CacheObjectManagerImpl.h

#import <Foundation/Foundation.h>
//#import "CacheObject.h"

@class CacheObject;

@protocol ICacheObjectManager <NSObject>

typedef enum {
    kSTRING,
    kBYTEARRAY,
    kCACHABLE,
    kSTRINGVALUE
} CacheObjType;

CacheObjType *CacheObjectType;

@required
//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
- (CacheObject *) createCacheObject:(NSString *)data url:(BOOL*)isURL savefile:(BOOL*)saveToFile downloadmgr:(ICacheObjDownloadMgr*) downloadMgr;
//-(CacheObject*) createCacheObject: (Cachable*) dataObject;
@end


@interface CacheObjectManagerImpl : NSObject {

}

@property(nonatomic,assign) id <ICacheObjectManager> delegate;

@end

Следующий файл, который использует вышеуказанный класс CacheObject:

//
//  CacheManagerImpl.h

#import <Foundation/Foundation.h>
//#import "CacheObject.h"
//#import "CacheObjectManagerImpl.h"


@class CacheObject;
@class CacheObjectManagerImpl;


@protocol ICachePurgeLogic <NSObject>

@required

- (void)runPurge: (NSDictionary*)cacheMap;

@end


@protocol ICacheManager <NSObject>

@required
- (void) put:(NSString*)key cacheobj:(CacheObject*)cacheObj;
- (CacheObject*)get: (NSString*)key;
- (void) clearEntireCache;
- (void) remove: (NSString*)key;
- (void) purge;
- (void) setCachePurgeCustomMgr: (ICachePurgeLogic*)cachePurgeLogic; **//ERROR: error: expected ')' before 'ICachePurgeLogic'**

@end

@interface CacheManagerImpl : NSObject {

    NSNumber *timeToLive;
    NSDictionary *cacheMap;
    ICacheObjectManager *cacheObjMgr; **//ERROR: error: expected specifier-qualifier-list before 'ICacheObjectManager'**

    ICachePurgeLogic *purgeManager; **//ERROR: error: expected specifier-qualifier-list before 'ICachePurgeLogic'**

}

@property(nonatomic,assign) id <ICacheManager> delegate;

- (void) getCacheManagerInstance: (NSNumber*) timeToLive;
- (ICacheObjectManager*) createCacheObjManager; **//ERROR: error: expected ')' before 'ICacheObjectManager'**

- (ICacheObjectManager*) getCacheObjManager; **//ERROR: error: expected ')' before 'ICacheObjectManager'**

@end

Я не могу понять, почему я получаю вышеуказанные ошибки. Если я включаю заголовочные файлы, я получаю больше ошибок из-за циклического заголовка. Каковы возможные способы обхода этих ошибок компилятора? Или мой код совершенно неверен в том смысле, что я передаю и возвращаю по протоколам.

Спасибо

1 Ответ

0 голосов
/ 20 июля 2011

Я бы начал с перемещения вашего объявления enum и того, что выглядит как ivar, который является указателем на ваш объявленный тип из вашего протокола. Вы не должны объявлять типы в объявлении протокола. Кроме того, если вы хотите, чтобы классы, реализующие ваш протокол, имели объект определенного типа, объявите свойство. Протоколы указывают только те методы, которые должны или должны быть реализованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...