2011-07-10 25 views
28

(tự hỏi và tự trả lời vì tôi đã dành hàng giờ trên web để tìm kiếm điều này và hầu hết các tài nguyên đều nói "Tôi đã giải quyết nó cuối cùng" mà không đưa ra một lời giải thích)"[something copyWithZone:]: bộ chọn không được nhận dạng được gửi đến" khi sử dụng Bindings/Core Data

tôi đã có một rất đơn giản ứng dụng Core Data + Bindings:

  • một NSArrayController kéo mục ra khỏi Core Data
  • một NSTableView khiến chúng
  • một NSTableView rằng khi bạn cl ick trên một hàng trong bảng đầu tiên, hiển thị các chi tiết của mục đó

khoản 3 nêu trên đã gây ra vụ tai nạn ứng dụng, với các lỗi: (!)

[(my NSManagedObject) copyWithZone:]: unrecognized selector sent to instance 

Thực hiện phương pháp đó và đặt một breakpoint ở đó, tôi thấy nó đã được gọi bởi lớp NSCell của Apple - điều này không giúp được gì nhiều :(.

Trả lời

23

TẮT TẤT CẢ những điều trên là cần thiết để kích hoạt tính năng này và XCode cho phép bạn làm điều gì đó sai trong 99,9% trường hợp, nếu không phải là 100%.

  1. Core-Data Objects không có thể thực hiện copyWithZone: - điều này gây ra sự sụp đổ

  2. Khi một tableview được phổ biến sử dụng Bindings, nó cố gắng để sao chép các giá trị của các đối tượng trong NSArrayController để hiển thị từng Cột

  3. ... nhưng nếu bạn không chỉ định ràng buộc cột đầy đủ (Xcode cho phép bạn chỉ định một nửa cột), thì tableview sẽ thử "bản sao" trên các đối tượng thay vì giá trị của họ

Các lỗi trong các ràng buộc của tôi: Tôi đã xác định rằng một Cột Bảng đã có một "giá trị" với:

Controller Key = "arrangedObjects" Model Key Path = (blank)

(đây là một lỗi trong XCode4 autocomplete - nó sẽ xóa trường ModelKeyPath đôi khi khi bạn chuyển đi quá nhanh)

Hoàn thành việc nhập liên kết, ví dụ:

Model Key Path = "value"

... và mọi thứ hoạt động trở lại.

+0

Dường như đôi khi Trình tạo giao diện không tự động lưu thay đổi khi bạn đang ở trong trường văn bản trong thanh tra và lần chạy. Trường (ví dụ: Đường dẫn khóa mô hình) * xuất hiện * được đặt khi thực tế không phải vậy. – fzwo

6

Cảm ơn bạn đã giải pháp này, nó chỉ cho tôi đi đúng hướng. Đối với những người bạn học InterfaceBuilder Tôi hy vọng thông tin bổ sung này sẽ giúp ích cho bạn.

Nó chỉ ra trong khi xây dựng một hướng dẫn tôi đã vô tình Giới hạn một Text field Cell - Text Cell đến ArrayController.ObjectValue của tôi.
The real ràng buộc được cho là xảy ra tại

Table Column > Table Cell View > Static Text - Table View Cell

Đó là một là đúng, nhưng trực quan trong cây dưới nó (vì lý do tôi không hiểu nhưng IB cần một Text Field Cell.) Tôi đã cũng ràng buộc:

Table Column > Text Field Cell - Text Cell

nó là thứ hai ràng buộc mà cố gắng để sao chép toàn bộ đối tượng vì con đường đã objectValue không có chìa khóa, đó là tri ggering lỗi này.

Có thể là lỗi newbie, nhưng nó có nghĩa là đi qua đối tượng MỌI và kiểm tra các ràng buộc và tôi đã xem qua số một này.

+0

Lỗi người mới ... nhưng ý tưởng về người xây dựng giao diện người dùng trực quan là làm mọi thứ dễ dàng hơn, không khó hơn ... cảm ơn vì đã mô tả, hóa ra tôi đã phạm sai lầm tương tự –

8

Tôi cũng muốn gửi ở đây vì tôi đã có một vấn đề tương tự với cùng một loại điều

đối tượng được xác định sản phẩm nào:

sai mã:

@property (nonatomic, copy, readwrite) MSender * sender; 

này nên TROW một biên dịch lỗi vì tính tham chiếu Xcode không có ý tưởng làm thế nào để sao chép đối tượng của tôi. Thay vào đó, thất bại vào thời gian chạy ...

Viết mã:

@property (nonatomic, strong, readwrite) MSender * sender; 

Hy vọng nó sẽ giúp một ai đó.

+0

Chúc mừng - giải pháp này tôi đã xem xét trong một ngày !! :)) – stan4th

+0

Chúc mừng :-D Giải quyết vấn đề của tôi! – Daneo

+0

LỚN LỚN. Điều này sẽ không hoạt động trong một số trường hợp. Ít nhất trong trường hợp của tôi nó xuất hiện khi tôi cố gắng lưu một đối tượng được tạo ra trong bối cảnh con tự động phát hiện trong biến đó (tôi đã không thử ngữ cảnh chính vì nó dường như chỉ hoạt động trong chuỗi chính). Đường khác có vẻ như tình huống sau: thông qua một thời gian đối tượng này trở thành không. – Gargo

3

Như một gợi ý để tránh bất kỳ loại vấn đề với các ràng buộc người ta có thể chuyển đổi các NSManagedObject vào NSDictionary khi Populating các bộ điều khiển với: [object dictionaryWithValuesForKeys:[[object entity] attributeKeys]], nó là dễ dàng hơn nhiều để kết nối và gỡ lỗi :-)

Cảm ơn con trỏ bằng cách này!

0

Tôi cũng có một vấn đề tương tự và nó đến từ việc gọi một ProxyObject thay vì đối tượng thực tế từ một bộ điều khiển mảng.

Ví dụ:

MYEntity *entity = EntityController.selection; 
NSString *property = entity.property; // <--- causes the error 

nhưng

MYEntity *entity = EntityController.selectedObjects firstObject]; // <--- fixes the error 
NSString *property = entity.property; 
0

Vô tình phải đối mặt với vấn đề này.

Sau một cuộc điều tra nhỏ, tôi phát hiện ra rằng lý do là tùy chọn ràng buộc ca cao sai được đặt trên đối tượng một đối tượng NSTextField.

enter image description here

enter image description here

Vấn đề đã được cố định bằng cách chuyển đổi các ràng buộc tắt.

0

Tôi nhận được thông báo này khi tôi trả lại chế độ xem từ hàm NSTableViewDataSource-tableView:objectValueForTableColumn:row:. Thay vào đó, nó có nghĩa vụ trả về một giá trị (ví dụ: NSString*).(Không ngạc nhiên khi đặt tên, nhưng lỗi không hữu ích khi phát hiện ra điều này. Hàm tôi đang nghĩ đến là -tableView:viewForTableColumn:row: trong NSTableViewDelegate.)

0

Tôi gặp phải lỗi này khi tôi cố gắng thực hiện ràng buộc chi tiết chính. Một cái gì đó tương tự như Sở/Nhân viên. Tôi cố gắng để ràng buộc một arrayController để "selection.employees" Sở và nhận:

-[Employee copyWithZone:]: unrecognized selector sent to instance

Hóa ra mối quan hệ lao động đã không được thiết lập để đến với nhiều người, như dự định, nhưng to-one. Khi tôi đã sửa xong, tất cả đều ổn.

Các vấn đề liên quan