2012-09-15 14 views
8

tôi đang sử dụng xcode 4.4.1 cho mục tiêu iOS 5.1 tôi đã bắt đầu dự án của mình bằng ARC và ở giữa dự án tôi đã thêm một số nguồn thứ ba phi arc vào dự án của tôi. tại thời điểm này, tôi đã quyết định thử tái cấu trúc trong xcode và một lỗi xảy ra. nó đến từ một trong những mã nguồn ban đầu của tôi.tái cấu trúc thành các kết quả hồ quang trong "tổng hợp tài sản 'yếu' chỉ được phép trong chế độ arc hoặc gc"

tôi có thuộc tính (nonatomic, weak) và tôi đã tổng hợp nó ==> tổng hợp thuộc tính 'yếu' chỉ được cho phép ở chế độ ARC hoặc GC.

Tôi đang bối rối - tôi đang sử dụng vòng cung và nó phàn nàn rằng nó chỉ được phép trong vòng cung ??

Hiện tại, tôi đã tái cấu trúc ứng dụng của bên thứ ba từ dự án khác và sao chép nó cho dự án của tôi để làm việc, nhưng ở trên là một câu hỏi tôi vẫn muốn hiểu tại sao. Cảm ơn! (bằng cách này, khi tôi chuyển sang arc, nó nói rằng mục tiêu hiện đang sử dụng ARC)

+0

Tôi gặp vấn đề này khi đặt loại thuộc tính 'yếu' thay vì 'gán' trước khi di chuyển đến ARC – poGUIst

Trả lời

-1

thay vì sử dụng:

@property(nonatomic,assign) 

* note - Đây là không giống như yếu đuối, nhưng rất giống nhau . Yếu cũng đặt đối tượng thành nil, gán không.

+0

. câu trả lời đúng, như gán không phải là điều tương tự. Yếu tự động đặt biến thành nil khi nó được phát hành. Gán không. – AppHandwerker

+0

Chúng không giống nhau, bởi vì yếu không phải là một khái niệm trong các phiên bản iOS cũ. Trong các phiên bản iOS cũ không cho phép yếu nhất, bạn nhận được chỉ định và thiết lập biến thành nil theo cách thủ công. – dacopenhagen

+2

Có nhưng mục tiêu của anh ấy là 5.1 nên đây không phải là câu trả lời đúng. Có vẻ như vấn đề là anh ta đã thiết lập nó như là một dự án ARC và vì một lý do nào đó cố gắng chuyển đổi nó sau đó. Điều này sẽ ném các thông báo lỗi lạ như mô tả. Ví dụ nếu anh ta làm như bạn nói và sau đó chuyển đổi sang ARC nó sẽ đề nghị thay đổi chúng thành yếu :) lẻ xem xét nó sẽ ném một lỗi trước khi tay nếu bạn thử và chuyển đổi nó sau khi đã thực hiện ARC – AppHandwerker

2

Có vẻ như vấn đề là bạn đã thiết lập nó làm dự án ARC và vì lý do nào đó của bạn đang cố chuyển đổi lại. Tôi chỉ có thể giả định rằng quá trình không mong đợi do đó yếu tài liệu tham khảo ở giai đoạn này. Nếu bạn đặt chúng thành Chỉ định, sau đó chuyển đổi sang ARC, bạn sẽ thấy nó sau đó đề xuất bạn thay đổi chúng thành yếu.

1

Tôi đã có cùng một triệu chứng khi sử dụng Xcode 4.6.3 nhắm mục tiêu iOS 6.1. Tôi đã đưa vào một lớp không phải ARC từ một dự án khác và chuyển đổi nó thông qua trình đơn Refactor chỉ để có các bản dựng tiếp theo thất bại trong một lớp đã tồn tại trước đó với lỗi mà bạn thấy ("tổng hợp tài sản" yếu "chỉ được phép trong vòng cung hoặc gc chế độ").

Các thuộc tính của dự án cho biết nó vẫn là một dự án ARC nhưng trình biên dịch dường như đã quên trường hợp này cho trường hợp được đề cập đến.

Tôi đã giải quyết vấn đề bằng cách đặt thuộc tính thành 'mạnh' và chuyển đổi lớp đó thành ARC qua menu Trình đơn. Không ngạc nhiên khi nó nói với tôi không có thay đổi là cần thiết nhưng đã cung cấp một nút Save mà tôi nhấp vào. Sau đó tôi có thể thay đổi tài sản trở lại 'yếu' và biên dịch dự án. (Tôi cho rằng một số siêu dữ liệu đã được đồng bộ hóa ở đâu đó trên đường đi.)

EDIT: Cuối cùng tôi phải 'Refactor' các lớp tuân thủ ARC khác thành ARC như thể họ đã biên soạn chúng tạo cảnh báo và gây ra sự cố trong ứng dụng của tôi . Tôi nghĩ rằng đạo đức của câu chuyện là bao gồm toàn bộ dự án của bạn trong việc tái cấu trúc có thể an toàn hơn ...