2013-10-03 71 views
12

我想要做到的是像NSObject的定制初始化与对象/参数

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

,然后在NSObject“人”,有这样的事:

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

,然后允许我继续用这些params来使用person对象。这是可能的,还是我必须做正常的

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

回答

25

您的退货类型为空,但应该是instancetype

你也可以使用这两种类型的要码....

更新:

@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 

使用它,如下:

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

这是一个例子,我不知道如何正确地执行它。如果你可以发布一个演示.h和.m,那将会很有帮助。 –

9

更改您的代码像这样

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

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

好的答案,但它会更好,如果也给一些信息(或只是链接),为什么它更好。 – Monolo

+3

@Monolo :)我的英文不太好,语句太复杂,可能会让人不明白~~ – zt9788

0

所以,你可以用现代的Objective-C风格得到关联数组值;)

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

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