2017-02-17 6 views
0

私が持っているクラス:プロパティ/メソッドの1つとしてカスタムクラスオブジェクトを参照する方法はありますか?例えば

CustomClass *obj = [[CustomClass alloc] init]; 
obj.name = @"Custom object"; 
obj.value = @1; 

それに参照のうえときの「name」プロパティまたはgetDictメソッドを取得する方法があります:

@interface CustomClass: NSObject 
    @property(nonatomic, readwrite) NSString *name; 
    @property(nonatomic, readwrite) NSNumber *value; 
    -(NSDictionary *)getDict; 
@end 

@implementation CustomClass 
-(NSDictionary)getDict 
{ 
    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary: @{}]; 
    if(self.name) { 
     dict[@"name"] = self.name; 
    } 
    if(self.value) { 
     dict[@"value"] = self.value; 
    } 
    return dict; 
} 
@end 

は、その後、私は、そのクラスのインスタンスを作成しますオブジェクト?同様

NSLog(@"%@", obj); 

は、たとえば 'name'プロパティのみを返しますか?

+0

辞書呼び出し[obj getDict]を取得して名前を取得するにはNSString * name = [obj getDict] [@ "name"] – suhit

+1

これを取得するのに 'obj'ではなく' obj.name'を呼び出さないのはなぜですか?それがログだけの場合、 ' - (NSString *)description'を' return _name; 'のようなもので上書きしてください。それは誤解を招きます。私が知っている 'return [NSString stringWithFormat:@" <%@ %p>名前:%@、[self class]、self、_name]; ' – Larme

+0

を実行する方が良いかもしれないが、直接プロパティまたはメソッドを参照しない方法がある。 – Ratka

答えて

1

descriptionまたはdebugDescriptionを上書きする必要があります。

- (NSString *)description 
{ 
    return self.name; 
} 
0

私は(それが正しい方法かどうかわからない)方法を見つけました: マイカスタムクラスは、マーカークラスMySerializableのサブクラスです。今私は私のオブジェクトの配列を持っている場合は、配列のすべてのアイテムについては、私はその種類のMySerializableをチェックし、[object getDict]に配列内のそのオブジェクトを変更します。

関連する問題