Trong một số bảo trì của một số multitouch "vẽ trên màn hình" mã, tôi đã gặp một lỗi liên quan đến cách tham chiếu đến trường hợp chạm nên được thiết lập giữa touchesBegan: withEvent :, touchesMoved: withEvent: và touchesEnded: withEvent :.Cách theo dõi các điểm chạm theo cách nhất quán giữa các lần chạmBắt đầu: và chạm vàoĐược cấp :?
Mã này sử dụng một trường hợp NSDictionary để lưu trữ tài liệu tham khảo của chạm trong touchesBegan: withEvent :, như sau:
for (UITouch *touch in touches]) {
NSValue *touchValue = [NSValue valueWithPointer:touch];
NSString *key = [NSString stringWithFormat:@"%@", touchValue];
[myTouches setValue:squiggle forKey:key];
}
Và lấy chúng trong touchesEnded: withEvent: theo cách này:
for (UITouch *touch in touches) {
NSValue *touchValue = [NSValue valueWithPointer:touch];
NSString *key = [NSString stringWithFormat:@"%@", touchValue];
NSObject *valueFromDictionary = [myTouches valueForKey:key];
[myTouches removeObjectForKey:key];
}
Trong bit cuối cùng của mã này, valueFromDictionary xảy ra thỉnh thoảng là nil, vì khoá không được từ điển biết đến. Thỉnh thoảng, tôi có nghĩa là khoảng 1% thời gian.
Bây giờ bối cảnh được thiết lập, câu hỏi của tôi là:
Bất cứ ý tưởng tại sao mã này là lỗi? Tôi không chắc chắn lý do tại sao nó không hoạt động, đặc biệt là do tần số rất thấp của lỗi
Some doc from Apple khẳng định sử dụng địa chỉ của đối tượng UITouch là các phím
: nhưng nó có nghĩa là sử dụng đối tượng NSValue * thay vì các đối tượng NSString * (và do đó sử dụng CFDictionaryRef thay vì NSDictionary vì thực tế UITouch không triển khai giao thức sao chép).Làm thế nào để lưu trữ một đại diện NSString của địa chỉ thay vì bản thân NSValue không thể là một giải pháp dễ dàng để có thể sử dụng NSDictionary?Cập nhật: Apple đã cập nhật trang và xóa ví dụ về lưu trữ UITouch qua NSString và chỉ đề cập đến giải pháp CFDictionaryRef không phải đối tượng.
Tôi e là tôi xa C và các công cụ con trỏ và cần trợ giúp để hiểu lý do có lỗi trong mã này.
Tôi đã thử giải pháp NSValue nhưng có cùng kết quả so với NSString: hoạt động độc đáo 99% thời gian nhưng vẫn còn 1% lỗi này. Bây giờ tôi cho rằng đó là lỗi của Apple (thực tế là trang tôi đã đề cập trong câu hỏi của tôi vừa được cập nhật cách đây vài ngày là một đầu mối thậm chí nhân viên Apple không chắc chắn về vấn đề này) HOẶC một vấn đề đồng thời giữa thời điểm Tôi đặt dữ liệu vào và lấy dữ liệu ra. –