2012-02-16 14 views
1

Objective-C用にプロトコルバッファを使用しています。私はprotoファイルを問題なくコンパイルします。しかし、私がプロジェクトにfile.pb.hとfile.pb.mを追加すると、Objective-Cで許可されていない値を返すセッターがいくつかあります(少なくともXcodeではこれがエラーになります)。同じ問題を抱えている人や、何か渋滞している人はいますか?Objective-Cでのprotobufコンパイル済みファイルの問題

@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'という名前の内部プロパティを使用します。 プロトコルバッファメッセージ定義で 'result'という名前のプロパティも定義されている場合、そのメッセージのビルダークラスは内部 'result'宣言とは異なるsetResult:メソッドを生成します。

私の観点からは、理想的なソリューションは、生成* _Builderクラスはあまり一般的ではない名前を使用するようにObjective-Cのプロトコルバッファコンパイラプラグインにパッチを適用することです。

メッセージ定義のフィールド名を変更することもできます。これは理想的なことではありませんが、少なくともフィールドのタグであるため、フィールド名は区別せず、フィールドを一意にするため、実際には何も破壊しません。ただし、シナリオによっては、これが常に可能であるとは限りません。

さらに別のオプションは、問題のあるクラスに対して生成されたコード(ES)をパッチすることです。繰り返しますが、理想からは遠いですが、クイックフィックスとして機能しますが、クラスを再生成するときはいつでも中断します。ここで

は、簡単な修正です: https://gist.github.com/pdcgomes/7005463

は、この情報がお役に立てば幸いです。 乾杯。

関連する問題