Tôi có một câu hỏi đơn giản về mã hóa xcode nhưng không biết tại sao mọi thứ không hoạt động như tôi nghĩ. Tôi có một mảng các đối tượng (các đối tượng tùy chỉnh). Tôi chỉ muốn kiểm tra xem cái này có nằm trong mảng không. Tôi đã sử dụng mã sau:NSArray containsObject method
NSArray *collection = [[NSArray alloc] initWithObjects:A, B, C, nil]; //A, B, C are custom "Item" objects
Item *tempItem = [[Item alloc] initWithLength:1 width:2 height:3]; //3 instance variables in "Item" objects
if([collection containsObject:tempItem]) {
NSLog(@"collection contains this item");
}
Tôi cho rằng việc kiểm tra ở trên sẽ cho tôi kết quả tích cực nhưng không. Hơn nữa, tôi đã kiểm tra xem các đối tượng được tạo có giống nhau hay không.
NSLog(@"L:%i W:%i H:%i", itemToCheck.length, itemToCheck.width, itemToCheck.height);
for (int i = 0, i < [collection count], i++) {
Item *itemInArray = [collection objectAtIndex:i];
NSLog(@"collection contains L:%i W:%i H:%i", itemInArray.length, itemInArray.width, itemInArrayheight);
}
Trong giao diện điều khiển, đây là những gì tôi nhận:
L:1 W:2 H:3
collection contains L:0 W:0 H:0
collection contains L:1 W:2 H:3
collection contains L:6 W:8 H:2
Rõ ràng là tempItem
là bên trong các mảng collection
nhưng không xuất hiện khi tôi sử dụng containsObject:
để kiểm tra xem nó. Bất cứ ai có thể cho tôi một số hướng mà một phần tôi sai? Cảm ơn rất nhiều!
Ồ, xin lỗi, chỉ là lỗi đánh máy cho "Quả", nó phải là "Mục". Bạn có nghĩa là so sánh các đối tượng lớp tùy chỉnh bởi containsObject: không hoạt động? – Anthony
Nó hoạt động, nó chỉ được so sánh mặc định bằng cách sử dụng một tham chiếu đến đối tượng tùy chỉnh của bạn. Nếu bạn muốn tạo 'tempItem' bằng' A' trong ví dụ trên, bạn sẽ chỉ cần tạo phương thức 'isEqual' trên lớp của bạn. – Senseful
@Anthony, suy nghĩ về nó theo cách này: Làm thế nào có thể 'NSObject', cung cấp so sánh mặc định, biết cách bình đẳng được định nghĩa cho các lớp tùy chỉnh của bạn? Thuộc tính nào cần xem xét và thuộc tính nào? –