Tôi đang làm việc thông qua chương "Mã hóa giá trị khóa" trong "Lập trình cho Mac OS X". Tôi đã xây dựng một giao diện với một thanh trượt và một nhãn, cả hai ràng buộc với fido, một int. Nếu tôi đặt thuộc tính cho fido thành chỉ đọc, di chuyển thanh trượt vẫn khiến nhãn thay đổi giá trị của nó. Tôi đã giả định rằng tôi sẽ nhận được một số loại lỗi cho việc này. Nếu thuộc tính là chỉ đọc, cách thanh trượt vẫn có thể ghi vào thuộc tính? Tôi nghĩ rằng nó sẽ không có setters tạo ra, và KVC sẽ không làm việc. Cảm ơn.Tại sao thuộc tính chỉ đọc vẫn cho phép ghi bằng KVC
Dưới đây là đoạn code tôi đang sử dụng:
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject
{
int fido;
}
@property (readonly, assign) int fido;
@end
#import "AppController.h"
@implementation AppController
@synthesize fido;
- (id)init
{
[super init];
[self setValue:[NSNumber numberWithInt:5] forKey:@"fido"];
NSNumber *n = [self valueForKey:@"fido"];
NSLog(@"fido = %@", n);
return self;
}
@end
alt text http://idisk.me.com/nevan/Public/Pictures/Skitch/Window-20091001-174352.png
Bạn cũng có thể sử dụng + (BOOL) accessInstanceVariablesDirectly {return NO; } để loại bỏ hành vi KVC này – sbooth
Điểm tốt và thói quen tốt để tham gia. Cảm ơn! – bbum
Câu trả lời hay, cảm ơn. Lý do tôi hỏi câu hỏi này là một trong những điểm chính của chương này là KVC sử dụng những người định cư và getters. Tôi cho rằng đó là cách duy nhất họ làm việc. Phong cách init là phong cách anh ta sử dụng trong cuốn sách. Anh ta nói rằng các lớp anh ta lớp con không bao giờ trở lại số không, vì vậy anh ta bỏ qua việc kiểm tra sự đơn giản. –