2013-10-03 21 views
12

Was ich versuche zu erreichen ist so etwas wieNSObject benutzerdefinierte init mit dem Objekt/Parameter

Person *person1 = [[Person alloc]initWithDict:dict]; 

und dann in der NSObject "Person", so etwas wie:

-(void)initWithDict:(NSDictionary*)dict{ 
    self.name = [dict objectForKey:@"Name"]; 
    self.age = [dict objectForKey:@"Age"]; 
    return (Person with name and age); 
} 

die dann erlaubt Ich benutze das Objekt mit diesen Parametern. Ist das möglich, oder muss ich das normale

Person *person1 = [[Person alloc]init]; 
person1.name = @"Bob"; 
person1.age = @"123"; 

tun?

Antwort

25

Ihre Rückgabetyp ist ungültig, während es sollte instancetype.

Und Sie können beide Arten von Code verwenden, die Sie wollen ....

Update:

@interface testobj : NSObject 
@property (nonatomic,strong) NSDictionary *data; 

-(instancetype)initWithDict:(NSDictionary *)dict; 
@end 

.m

@implementation testobj 
@synthesize data; 

-(instancetype)initWithDict:(NSDictionary *)dict{ 
self = [super init]; 
if(self) 
{ 
    self.data = dict; 
} 
return self; 
} 

@end 

es verwenden, wie unten:

testobj *tt = [[testobj alloc] initWithDict:@{ @"key": @"value" }]; 
NSLog(@"%@",tt.ss); 
+0

, das ein Beispiel war, ich weiß nicht, wie man es richtig zu implementieren. Wenn Sie eine Demo .h und .m veröffentlichen könnten, wäre das eine große Hilfe. –

9

ändern Sie Ihren Code wie folgt

-(id)initWithDict:(NSDictionary*)dict 
{ 
    self = [super init]; 

    if(self) 
    {  
     self.name = [dict objectForKey:@"Name"]; 
     self.age = [dict objectForKey:@"Age"]; 
    } 
    return self; 
} 
+0

Gute Antwort, aber es wäre noch besser, wenn auch einige Informationen (oder nur Links) geben, warum es besser ist. – Monolo

+3

@Monolo :) Mein Englisch ist nicht sehr gut, zu komplexe Sätze, kann die Leute nicht verstehen ~~ – zt9788

0

So können Sie modernen Objective-C-Stil verwenden, um assoziatives Array Wert zu erhalten;)

-(id)initWithDict:(NSDictionary*)dict 
{ 
    self = [super init]; 

    if(self) 
    {  
     self.name = dict[@"Name"]; 
     self.age = dict[@"Age"]; 
    } 
    return self; 
} 
Verwandte Themen