2013-10-03 14 views
12

gì tôi đang cố gắng để đạt được một cái gì đó giống nhưNSObject tùy chỉnh init với đối tượng/thông số

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

và sau đó trong "Person" NSObject, có cái gì đó như:

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

mà sau đó cho phép tôi tiếp tục sử dụng đối tượng người với các thông số đó. Điều này có thể xảy ra hay tôi phải thực hiện bình thường

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

?

Trả lời

25

Loại lợi tức của bạn bị vô hiệu trong khi cần instancetype.

Và bạn có thể sử dụng cả hai loại mã mà bạn muốn ....

Cập nhật:

@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 

Sử dụng nó như sau:

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

Đó là một ví dụ, tôi không biết làm thế nào để thực hiện nó đúng cách. Nếu bạn có thể đăng một bản demo .h và .m, đó sẽ là sự trợ giúp tuyệt vời. –

9

thay đổi mã của bạn như thế này

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

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

Câu trả lời hay nhưng sẽ tốt hơn nếu cũng cung cấp một số thông tin (hoặc chỉ liên kết) là tại sao nó tốt hơn. – Monolo

+3

@Monolo :) Tiếng Anh của tôi không phải là câu rất phức tạp, quá phức tạp, có thể khiến mọi người không hiểu ~~ – zt9788

0

Vì vậy, bạn có thể sử dụng phong cách khách quan-c hiện đại để có được giá trị mảng kết hợp;)

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

    if(self) 
    {  
     self.name = dict[@"Name"]; 
     self.age = dict[@"Age"]; 
    } 
    return self; 
} 
Các vấn đề liên quan