我需要檢測NSArray對象中的更改 - 也就是說,如果某個對象已添加到NSArray中/從NSArray中刪除或僅在原地進行了編輯。是否有一些集成的NSArray散列函數用於此任務 - 或者我需要爲NSArray編寫自己的散列函數?也許有人有不同的解決方案有任何想法嗎 ?在ObjC中檢測NSArray中的更改
3
A
回答
2
您可以使用NSArrayController
,即Key-Value-Observing兼容。不幸的是NSArray
只符合KVC標準。通過這種方式,您可以輕鬆監視陣列控制器的屬性arrangedObjects
。這應該可以解決你的問題。
而且,看到了這個問題:Key-Value-Observing a to-many relationship in Cocoa
5
所有的對象都有一個-hash
方法,但不是所有的對象都具有良好的執行。
NSArray的文檔沒有定義它的結果,但測試顯示它返回數組的長度 - 不是非常有用:
NSLog(@"%lu", @[@"foo"].hash); // output: 1
NSLog(@"%lu", @[@"foo", @"bar"].hash); // output: 2
NSLog(@"%lu", @[@"hello", @"world"].hash); // output: 2
如果性能並不重要,如果數組包含<NSCoding>
對象則你可以簡單的數組序列化到NSData
具有良好-hash
實現:
[NSArchiver archivedDataWithRootObject:@[@"foo"]].hash // 194519622
[NSArchiver archivedDataWithRootObject:@[@"foo", @"bar"]].hash // 123459814
[NSArchiver archivedDataWithRootObject:@[@"hello", @"world"]].hash // 215474591
爲了獲得更好的性能應該有一個答案的地方,說明如何編寫自己的-hash
方法。基本上在數組中的每個對象上調用-hash
(假設該數組包含可以可靠地進行散列的對象),並將每個對象混合在一起並使用一些簡單的隨機數學運算。
相關問題
- 1. 在NSArray中更改ManagedObjects
- 2. 在Treeview中檢測更改
- 3. 檢測System.Windows.Forms.TabPage中的更改
- 4. 檢測EntityFrameWork中的更改
- 5. 檢測Wifi中的更改
- 6. 檢測在Django中更改的密碼
- 7. 在MapView中檢測縮放更改
- 8. 在PageControl中檢測選項卡更改
- 9. 在TFS中檢測文件更改
- 10. 在.bat中檢測svn更改
- 11. 在JavaScript中檢測div更改
- 12. 檢測JTable中的選擇更改
- 13. 如何檢測Bootstrap Multiselect中的更改
- 14. 檢測標籤中的更改
- 15. 檢測UIImagePickerController中的方向更改?
- 16. 檢測流數據中的更改
- 17. 檢測目錄中的更改
- 18. 檢測ASP.NET網站中的更改
- 19. 檢測Internet Explorer中的狀態更改
- 20. 檢測iCal文件中的更改
- 21. 檢測EditText中的更改(TextWatcher無效)
- 22. 檢測動態段中的更改
- 23. 檢測Git中文件的更改
- 24. 如何檢測Amazon S3中的更改?
- 25. 陣列中的對象更改檢測
- 26. 檢測更改jQuery
- 27. Swift在.xib文件中檢測文本字段中的更改
- 28. AJAX在WebBrowser中的DIV中更改HTML時檢測
- 29. 在Entity Framework 4.0中檢測ObjectSet中的更改?
- 30. NSArray更改類型的NSNumber
雖然這不會告訴你一個對象是否在數組中發生了變異。你需要觀察數組中的每一個元素。 – Chuck 2010-09-17 18:43:51