2015-04-15 18 views
10

Sau khi cập nhật lên iOS8.3, tôi bắt đầu nhận được một loạt các cảnh báo mới đã không có trên iOS8.2. Một trong những đặc biệt mà bắt mắt của tôi;Tổng hợp thuộc tính tự động sẽ không tổng hợp thuộc tính - cảnh báo mới iOS8.3

@property (strong, nonatomic) IBOutlet UITableView *tableView; 

được khai báo trong tệp '.m'.

Điều gì đã thay đổi trong iOS8.3 để thực hiện cảnh báo này?

Auto property synthesis will not synthesize property 'tableView'; it will be implemented by its superclass, use @dynamic to acknowledge intention 
+0

Bộ điều khiển xem của bạn có thêm 'tableView' vào' UITableViewController' không? – Joe

+3

FYI, IBOutlets nên yếu vì chính chế độ xem có tham chiếu mạnh mẽ. Tránh các chu kỳ lưu giữ. https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html –

+2

@DCGoD những nỗi kinh hoàng khi nhìn vào mã mà tôi đã viết cách đây 18 tháng haha ​​ – DevC

Trả lời

15

Nếu bạn đang sử dụng UITableViewController thì bảngView đã được tổng hợp. (tức là self.tableView là tableView của UITableViewController).

9

Điều gì đã thay đổi? Trình biên dịch đã trở nên thông minh hơn.

Có thể bạn đang phân lớp UITableViewController.

UITableViewController đã có thuộc tính có tên là tableView. Nó đã được tổng hợp hoặc thực hiện khác trong UITableViewController. Vì vậy, cảnh báo cho bạn biết rằng bạn không nhận được thuộc tính tableView của riêng bạn, nhưng bạn đang nhận được một cái được cung cấp bởi UITableViewController.

Rõ ràng nếu bạn không biết bảngView trong UITableViewController và nếu bạn giả định sai rằng đây là thuộc tính của bạn, dưới sự kiểm soát của bạn, sẽ có sự cố. Đó là lý do tại sao bạn nhận được một cảnh báo. Vì vậy, nếu đó là những gì bạn đang làm, sau đó mã của bạn luôn bị hỏng nặng và cần sửa chữa.

Nhưng nếu bạn chỉ có khai báo @property trong mã của mình, nhưng bạn biết rằng đó thực sự là thuộc tính UITableViewController, không có hại gì được thực hiện, nhưng xóa @property vì nó sai.

+0

Cảm ơn bạn đã giải thích chi tiết. Đó là điểm cuối cùng. Đó thực sự là mã cũ tôi đã xem xét. Rất may Nó đã được đưa đến sự chú ý của tôi. – DevC

12

Tôi cũng gặp sự cố tương tự. Tôi đã giải quyết vấn đề này bằng phương pháp sau. Bên trong tệp .m của bạn viết @dynamic tableView theo số @implementation

Tôi hy vọng vấn đề của bạn sẽ được giải quyết.

+0

Bạn đã thích một sự quyến rũ !! cổ vũ. – salih

+0

Điều này không nhất thiết phải giải quyết nguyên nhân cơ bản, đó là bạn đang ghi đè một thuộc tính được định nghĩa trong một siêu lớp. –

1

Đã xảy ra sự cố tương tự với UITableViewCell tùy chỉnh tạo thuộc tính mới được gọi là imageView. Vì một thuộc tính có tên imageView đã tồn tại nên tôi đã nhận được thông báo lỗi. Tôi chỉ cần thay đổi tên thành projectImageView và nó hoạt động.

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