2009-12-28 41 views

Trả lời

48

Trong khi @weichsel là đúng, có một cách tốt hơn.

Sử dụng:

[anObject valueForKey: @"propertyName"]; 

[anObject setValue:value forKey:@"propertyName"]; 

Rõ ràng, @"propertyName" có thể là một NSString đó là tự động sáng tác trong thời gian chạy.

Kỹ thuật này được gọi là Key Value Coding và là cơ bản đối với Cocoa.

Tại sao điều này là tốt hơn là vì -valueForKey sẽ làm những gì cần thiết để "hộp" bất kỳ loại tài sản nào trả về một đối tượng. Do đó, nếu thuộc tính là loại int, nó sẽ trả về một thể hiện NSNumber chứa int.

Đây là dễ dàng hơn nhiều để đối phó với - performSelector sẽ chỉ làm việc với nhiều loại mà xảy ra để phù hợp với giá trị của một con trỏ bộ nhớ.

Lưu ý rằng cũng có -setValue:forKey:.

+0

Rất tiện dụng! Không biết điều đó. –

2

@synthesize propertyName tự động tạo các phương thức getter và setter.

Trình biên dịch tạo ra

  • - (id)propertyName;
  • - (void)setPropertyName;

Nếu bạn có một selector như NSString, bạn có thể sử dụng performSelector:NSSelectorFromString.
ví dụ .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

+1

Bạn sẽ phải sử dụng 'performSelector: withObject:' để đặt thuộc tính. –

Các vấn đề liên quan