2012-02-16 1 views
1

Я использую протокольные буферы для Objective-C. Я не могу скомпилировать файлы proto. Но когда я добавляю файлы file.pb.h и file.pb.m в свой проект, у них есть некоторые сеттеры, возвращающие значения, которые не разрешены в Objective-C (по крайней мере, Xcode дает ошибки для этого). Кто-нибудь с той же проблемой или с каким-то sugestion?Проблемы с файлами protobuf в Objective-C

@interface FileResultObject_Builder : PBGeneratedMessage_Builder { 
@private 
    FileResultObject* result; 
} 

- (FileResultObject*) defaultInstance; 

- (FileResultObject_Builder*) clear; 
- (FileResultObject_Builder*) clone; 

- (FileResultObject*) build; 
- (FileResultObject*) buildPartial; 

- (FileResultObject_Builder*) mergeFrom:(FileResultObject*) other; 
- (FileResultObject_Builder*) mergeFromCodedInputStream:(PBCodedInputStream*) input; 
- (FileResultObject_Builder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry; 

- (BOOL) hasCheckedIn; 
- (BOOL) checkedIn; 
- (FileResultObject_Builder*) setCheckedIn:(BOOL) value; 
- (FileResultObject_Builder*) clearCheckedIn; 

- (BOOL) hasCheckedOut; 
- (BOOL) checkedOut; 
- (FileResultObject_Builder*) setCheckedOut:(BOOL) value; 
- (FileResultObject_Builder*) clearCheckedOut; 

- (BOOL) hasDescription; 
- (NSString*) description; 
- (FileResultObject_Builder*) setDescription:(NSString*) value; 
- (FileResultObject_Builder*) clearDescription; 

- (BOOL) hasLastModifiedDate; 
- (NSString*) lastModifiedDate; 
- (FileResultObject_Builder*) setLastModifiedDate:(NSString*) value; 
- (FileResultObject_Builder*) clearLastModifiedDate; 

- (BOOL) hasCreatedDate; 
- (NSString*) createdDate; 
- (FileResultObject_Builder*) setCreatedDate:(NSString*) value; 
- (FileResultObject_Builder*) clearCreatedDate; 

- (BOOL) hasSize; 
- (int32_t) size; 
- (FileResultObject_Builder*) setSize:(int32_t) value; 
- (FileResultObject_Builder*) clearSize; 

- (NSArray*) keywordsList; 
- (NSString*) keywordsAtIndex:(int32_t) index; 
- (FileResultObject_Builder*) replaceKeywordsAtIndex:(int32_t) index with:(NSString*) value; 
- (FileResultObject_Builder*) addKeywords:(NSString*) value; 
- (FileResultObject_Builder*) addAllKeywords:(NSArray*) values; 
- (FileResultObject_Builder*) clearKeywordsList; 

- (BOOL) hasDirectory; 
- (BOOL) directory; 
- (FileResultObject_Builder*) setDirectory:(BOOL) value; 
- (FileResultObject_Builder*) clearDirectory; 

- (BOOL) hasMimeType; 
- (NSString*) mimeType; 
- (FileResultObject_Builder*) setMimeType:(NSString*) value; 
- (FileResultObject_Builder*) clearMimeType; 

- (BOOL) hasResult; 
- (ResultObject*) result; 
- (FileResultObject_Builder*) setResult:(ResultObject*) value; 
- (FileResultObject_Builder*) setResultBuilder:(ResultObject_Builder*) builderForValue; 
- (FileResultObject_Builder*) mergeResult:(ResultObject*) value; 
- (FileResultObject_Builder*) clearResult; 
@end 

Это часть кода. Ошибки в сеттерах возвращают что-то.

+0

Каковы ошибки? – bneely

+1

«Тип сеттера должен быть недействительным» –

+0

Использует ли код протокола протоколов Objective-C свойства? – bneely

ответ

1

Только что наткнулся на эту же проблему сегодня. К сожалению, сгенерированные классы Objective-C * _builder используют внутреннее свойство с именем «result» для создания фактического сообщения. Если определение сообщения буфера протокола также определяет свойство с именем «результат», это будет означать, что класс строителя для этого сообщения сгенерировал метод setResult:, который отличается от внутреннего объявления «результат».

С моей точки зрения, идеальным решением является исправить плагин компилятора буфера протокола Objective-C, чтобы сгенерированные классы * _Builder использовали менее распространенное имя.

Вы также можете изменить имя поля в определении вашего сообщения. Это не идеально, но, по крайней мере, это ничего не сломает, поскольку это полевой тег, который делает поле уникальным, а не его имя. Однако, в зависимости от вашего сценария это может быть не всегда возможно.

Еще один вариант - исправить сгенерированный код для класса (-ов) нарушения. Опять же, далеки от идеала, но работает как быстрое исправление, но будет продолжать ломаться всякий раз, когда вы восстанавливаете классы.

Вот быстрое решение: https://gist.github.com/pdcgomes/7005463

Надеется, что это помогает. Cheers.

 Смежные вопросы

  • Нет связанных вопросов^_^