Đôi khi tôi muốn tổ chức các yếu tố IB thành NSArray
s chủ yếu để giúp tôi tổ chức các yếu tố của mình. Thông thường, các lớp đối tượng khác nhau biến nó thành cùng một mảng với nhau. Trong khi điều này là một cách thuận tiện để tổ chức, tôi dường như không thể quấn quanh đầu tôi lý do tại sao nếu tôi có một mảng như thế này:cho vòng lặp - Loại đối tượng bị bỏ qua?
NSArray *array = [NSArray arrayWithObjects:((UITextField *)textField), ((UISegmentedController *)segmentedController), nil];
Tại sao tôi nhận được "Không đáp ứng với Selector" thông điệp khi tôi đặt một vòng lặp for
như thế này:
for (UITextField *text in array) {
[text setText:@""];
}
vòng lặp for
dường như được thông qua đối tượng mà không phải là của lớp UITextField
.
Điểm khai báo lớp của đối tượng là gì nếu tất cả các đối tượng trong mảng được chỉ định được truyền qua vòng lặp?
EDIT Chỉ cần để tham khảo, đây là cách tôi đang xử lý nó như bây giờ:
for (id *object in array) {
if ([object isMemberOfClass:[UITextField class]]) {
foo();
} else if ([object isMemberOfClass:[UISegmentedController class]) {
bar();
}
}
'id' đã là loại con trỏ. 99,9% thời gian, bạn muốn sử dụng kiểu 'id' đơn giản, không phải là con trỏ tới một' id * '. –