Xcode 4: Tạo xib UIView, không kết nối đúng cách


84

Tôi đang cố gắng tạo một ngòi có chứa một dạng xem sẽ được nhúng trong TableViewCell. Tôi đã tạo giao diện và tệp triển khai, ResultCell.hResultCell.m. Chúng còn hàng, xuất xưởng, không thay đổi mã.

Sau đó, tôi tạo một tệp XIB trống và kéo UIView vào đó. Sau đó, tôi nhấp vào Chủ sở hữu của tệp và đặt loại thành ResultCell. Tôi nhấp vào chế độ xem và đặt lớp của nó cũng là ResultCell.

Đây là những vấn đề tôi gặp phải:

  1. Khi sử dụng chế độ xem Assistant Editor (nơi tôi sống), ResultCell.htệp sẽ không xuất hiện khi tôi đang xem tệp ResultCell.xib. Tôi phải buộc nó tải bằng cách nhấp vào Tự động và chọn tệp.
  2. Khi tôi thả một nhãn vào dạng xem, sau đó Ctrl + Nhấp và kéo đến .h để tạo một ổ cắm, tôi nhận được thông báo lỗi sau: " Không thể chèn kết nối ổ cắm mới: Không thể tìm thấy bất kỳ thông tin nào về lớp có tên ResultCell. "

Tôi đã thử tạo và tạo lại chế độ xem, nhưng nó không hoạt động và tôi bắt đầu mất kiên nhẫn. Bất kỳ sự giúp đỡ sẽ được rất, rất đánh giá cao!


Tôi chỉ gặp phải điều này chính mình. Đêm qua nó hoạt động và hôm nay không có gì. Tôi sẽ cho bạn biết nếu tôi tìm thấy bất cứ điều gì.
Tavison

Đối với hồ sơ, nhiều câu trả lời ở đây đã giúp tôi trong năm qua. Các phiên bản gần đây của Xcode đã cải thiện nhiều thứ.
Tim Sullivan,

Câu trả lời:


82

Điều này có thể không hoạt động đối với vấn đề cụ thể của bạn, nhưng đôi khi tôi gặp lỗi đó khi làm việc với các ngòi mới được tạo. Xóa và tạo lại các ngòi và Bộ điều khiển Chế độ xem có cùng tên như trước đây không giải quyết được sự cố, nhưng việc khởi chạy lại Xcode đã làm được.


+1 cũng làm việc cho tôi. Chỉ cần khởi động lại XCode và bây giờ tôi có thể CTRL + Kéo để tạo @propertys mới trong tệp .h của mình.
Mike Gledhill

1
Câu trả lời của David Pisoni phù hợp với tôi. Đơn giản chỉ cần khởi động lại Xcode đã không cắt được mù tạt.
Andy

Tôi đã không gặp sự cố này xảy ra cho nhiều bản phát hành Xcode bây giờ, vì vậy có thể có một nguyên nhân khác phổ biến hơn hiện nay so với nguyên nhân mà tôi đã gặp phải khi viết câu trả lời này vào năm ngoái.
Bị phân mảnh

@Defragged thể bạn cũng bao gồm các bước để bộ nhớ cache rõ ràng bằng cách nhấn Ctrl K trước khi trích dẫn hoặc thậm chí tốt hơn là bỏ Xcode sau đó bộ nhớ cache rõ ràng ( ~/Library/Developer/Xcode/DerivedData)
user1046037

Tôi đang làm việc với Xamarin Studio. Tôi phải thoát xcode và xamarin studio, sau đó mở lại Xamamrin Studio và mở một tệp xib từ đây đã khởi chạy bằng xcode. Sau đó, trợ lý biên tập đã mở chính xác.
Dave Haigh

113

Tôi đã rơi vào trạng thái tương tự như hôm nay. Thật là kỳ lạ: tôi có thể đính kèm bất kỳ XIB nào (mới hoặc hiện có) vào bất kỳ lớp ViewController nào đã tồn tại trong dự án, nhưng tôi không thể tạo một ViewController mới và gắn nó đúng vào bất kỳ XIB nào. Chức năng "trợ lý" không hoạt động, cũng như chức năng kết nối IB-to-header-file.

Đóng dự án và mở lại không khắc phục được nó.
Thoát XCode và khởi động lại không khắc phục được sự cố.
Tạo một dự án mới và kiểm tra chức năng hoạt động tốt, điều này khiến tôi tin rằng có thứ gì đó bị hỏng trong bộ nhớ cache nào đó ở đâu đó.

Giải pháp của tôi

  • Đóng dự án của bạn.
  • Chuyển đến thư mục ~ / Library / Developer / XCode / DerivedData và XÓA tất cả các thư mục con có tham chiếu đến dự án bạn đang làm việc.
  • Mở dự án của bạn trong XCode. Sự cố sẽ được khắc phục ngay bây giờ.

Ngẫu nhiên, chỉ chạy sạch hoàn toàn dường như không làm rõ ràng mọi thứ. Tôi đã phải thùng rác dữ liệu có nguồn gốc. Tôi chắc chắn rằng tôi đã nhận được vị trí này vì các trò chơi git tôi đang chơi, nhưng tôi không biết làm thế nào để thoát ra, bởi vì ngay cả việc chuyển trở lại các bản sửa đổi git trước đó cũng không giúp được gì. (Đó cũng là một manh mối lớn cho thấy nó là một thứ gì đó chưa được kiểm soát bởi chính dự án.)


6
Tôi vừa đăng nhập SO trên máy Mac của mình, để tôi có thể ủng hộ câu trả lời này! Hoàn toàn làm việc cho tôi. Điều này khiến tôi phát điên, vì tôi chỉ đang học cách sử dụng XCode và nó đã đủ khó nếu không có những vấn đề vô lý như thế này. :) Cảm ơn bạn!!!
Dave

2
nó thậm chí hoạt động mà không cần khởi động lại xcode; chỉ xóa dữ liệu thu được và xây dựng lại (trên một dự án iOS)
nob

Điều này hoạt động khi khởi động lại xcode thì không. Tôi không biết nó đã xảy ra như thế nào bởi phương pháp của David Pisoni đã hoạt động tuyệt vời.
mmopy

Tuyệt vời. Làm sao mà bạn biết được điều đó? Đã làm cho tôi.
hol

1
lol tốt của nó để biết rằng IOS và xcode thể được chỉ là lỗi nếu không muốn nói nhiều hơn so với sử dụng Eclipse và Android: p
James andresakis

14

Tôi vừa gặp sự cố này và việc khởi động lại Xcode không khắc phục được. Tôi đã xóa các tệp lớp khỏi dự án sau đó thêm chúng trở lại và nó bắt đầu hoạt động.


13

Tôi đã có cùng một vấn đề. Và tôi đã thử:

  • Khởi động lại Xcode
  • Xóa dữ liệu có nguồn gốc
  • Và nhiều cái khác

Không ai trong số đó hoạt động. Điều làm việc cho tôi chỉ đơn giản là:

  • Xóa các tệp lớp 'tình nghi' khỏi Dự án (chỉ xóa Tài liệu tham khảo, hả?)
  • Thêm lại chúng vào dự án

Và thực hiện!


2
Điều này làm việc cho tôi, cảm ơn bạn! Đó là điều đầu tiên tôi thử, ngoài việc khởi động lại XCode, vì nó có vẻ như ít công việc và rủi ro nhất, và nó hoạt động rất tốt.
adriandz

1
đã làm việc cho tôi sau khi khởi động lại xcode và xóa dữ liệu có nguồn gốc không
trôi qua

1
Điều này cũng đã làm được mẹo cho tôi. Điều này có thể liên quan đến việc cấu trúc lại tên lớp (đó là những gì tôi vừa làm trước đây).
ecotax

9

Nếu việc khởi động lại Xcode không hoạt động với bạn, tôi nhận thấy rằng Chuyển đổi tệp .m mới ra và quay lại thành viên mục tiêu hoạt động.


3

Điều này đã giúp tôi:

  1. từ bảng điều khiển tệp dự án (phía bên trái) chọn tệp xib bị hỏng.
  2. Nhấp vào biểu tượng Chủ sở hữu tệp từ chế độ xem trình chỉnh sửa.
  3. từ Bảng thuộc tính (bên phải) chọn tab thứ ba (ở trên cùng)
  4. chỉ định "Lớp tùy chỉnh"

Nếu bạn không nhìn thấy "bảng điều khiển", hãy nhìn vào góc trên bên phải của cửa sổ và bật các nút "xem" thích hợp. Nếu bạn không thấy các nút "xem" thì hãy nhấp vào nút trên cùng bên phải của viên nang.


Gần đây tôi đã thay đổi (cấu trúc lại) tên lớp. Lớp tùy chỉnh như đã đề cập trong câu trả lời này vẫn được đặt thành tên cũ. Đã thay đổi nó thành tên mới và nó đã được sửa.
PaulMrG

2

Tôi nhận thấy rằng tệp .m đã được chuyển vào bên trong thư mục en.lproj.

Chỉ cần xóa (chỉ tham chiếu) tệp .m khỏi Xcode và chuyển .m ra khỏi en.lproj. Thêm lần nữa, nó sẽ khắc phục được sự cố.

Đừng lo lắng, bạn sẽ lấy lại được tất cả các kết nối của mình.


.M của tôi đã được tạo tự động và tôi vẫn chưa thay đổi nó. Tôi đã làm và mọi thứ đều ổn. Không có gì khác đã hoạt động.
entonio

2

Tôi gặp phải vấn đề tương tự ngày hôm nay. Khởi động lại XCode không khắc phục được sự cố cho tôi. Tôi đã có thể đưa mọi thứ trở lại bình thường bằng cách sử dụng tùy chọn "Xóa" của "Dữ liệu có nguồn gốc" của dự án có thể tìm thấy trong Trình tổ chức . Người tổ chức nói rằng, "Dữ liệu gốc bao gồm chỉ mục, đầu ra xây dựng và nhật ký". Tôi đoán rằng đầu ra chỉ mục hoặc bản dựng đã gây ra sự cố này.


2

trong XCode, đi tới trình tổ chức, nhấp vào dự án, nhấp vào xóa dữ liệu dẫn xuất ... hơn là làm sạch dự án


2

Trong trường hợp của tôi, nó đã giúp thực hiện một "thay đổi giả" (chỉ là khoảng trắng) đối với tệp tiêu đề theo.


Tôi nghĩ rằng điều này có thể đã làm điều đó cho tôi. Trong trường hợp của tôi, tôi đã thêm một ổ cắm theo cách thủ công. Sau đó, tôi có thể kết nối mì của mình với nó, cũng như tạo các cửa hàng mới bằng cách kéo ctrl.
Daniel Wood

1
  1. ResultCell phải là một lớp con của UITableViewCell
  2. Bạn không nên kéo một UIViewvào canvas trống, bạn nên kéo mộtUITableViewCell
  3. Bạn nên chọn ô và thay đổi thành lớp con của bạn
  4. Chủ sở hữu thường là người điều khiển có ổ cắm vào ô

Mỗi khi bạn muốn tải một ô mới, hãy gọi:

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

sau khi tải, sử dụng ô và đặt ivar / ổ cắm thành 0, sẵn sàng cho lần tải tiếp theo

có những cách khác, nhưng cách này là phổ biến


Nếu tôi làm điều đó, tôi gặp chính xác vấn đề tương tự. Assistant Editor không hiển thị .h khi tôi đang xem nib và ctrl + drag không tạo mã ổ cắm, nó hiển thị lỗi.
Tim Sullivan

2
Bạn có đang sử dụng Xcode 4.0.2 không? Bạn có thể đặt trình chỉnh sửa trợ lý theo cách thủ công nếu nó hoạt động sai. Tôi giả sử bạn đã khởi động lại ứng dụng để kiểm tra lại sự cố này (Xcode 4 thường được hưởng lợi từ việc này). Có vẻ như nó không thể tìm thấy các tệp lớp trong dự án hoặc một cái gì đó được đặt tên sai - viết hoa quan trọng. Dự án hiện đang xây dựng? Đây là một chức năng cấp rất cao phụ thuộc vào công nghệ trình biên dịch mới.
bshirley

Aw, cho tôi. Vâng, khởi động lại Xcode và nó ngay lập tức bắt đầu hoạt động. 'Nói cho tôi biết, tôi sẽ đâm đầu vào kiếm bây giờ.
Tim Sullivan

1

Có lẽ điều làm việc cho tôi là cái này .. (Xcode v4.5)

Điều này không hoạt động

Tôi đang cố gắng kiểm soát kéo vào định nghĩa giao diện của .h

@interface SearchViewController : UIViewController

@end

Điều này đã hoạt động (có thể đó là cách nó được cho là hoạt động, tôi không biết nó trước đây) Xem dấu ngoặc mở và đóng. Điều khiển kéo và thả sau dấu ngoặc vừa đóng.

@interface SearchViewController : UIViewController
{
}

@end

1

Tôi đã gặp vấn đề tương tự với một dự án được viết bằng Swift.

Điều làm việc hiệu quả với tôi là thiết lập IBOutlet bằng mã như thế này

@IBOutlet var foo: UIView?

và sau đó kết nối nó với Interface Builder bằng cách kéo đến vòng tròn nhỏ xuất hiện ngay bên cạnh dòng mã.


Đây là cách DUY NHẤT tôi có thể làm cho nó hoạt động cho tôi. Tôi đang làm theo hướng dẫn của Apple được viết cho Objective-C (Bắt đầu phát triển ứng dụng iOS ngay hôm nay) và cần kết nối trường văn bản Mục việc cần làm mới. Cuối cùng tôi đã tạo @IBOutlet var textField: UITextField? và kết nối với nó, và nó đã hoạt động. Sử dụng XCode 6.4
andrewz

1

Không có cách giải quyết nào ở trên giải quyết được sự cố trình kết nối cho tôi, vì vậy tôi đã tạm dừng dự án thú cưng của mình cho đến khi tôi bắt gặp luồng stackoverflow sau:

https://stackoverflow.com/a/15873770/2846800

Tôi đã làm việc trên một dự án lớn trong phiên bản XCode trước đó và đã tắt lập chỉ mục. Bằng cách bật lại lập chỉ mục, sự cố của tôi hiện đã được khắc phục:

defaults delete com.apple.dt.XCode IDEIndexDisable

Bây giờ tôi có thể sử dụng các tính năng D&D của Interface Builder. Tôi hy vọng điều này có thể giúp những người khác ...


1

Sự cố này dường như là một lỗi Xcode chủ yếu phát sinh khi bạn thay thế một tệp bằng một tệp mới cùng tên. Xcode dường như giữ một tham chiếu của tệp cũ hơn cùng tên.

Nhưng dù sao, cách để khắc phục điều này dường như là:

  1. Làm sạch dự án
  2. Nhấp vào (Dự án của bạn) trong dạng xem Bộ điều hướng dự án. Chuyển đến Nguồn biên dịch trong Giai đoạn xây dựng của mục tiêu mà bạn đang xây dựng. Xóa và thêm lại tệp .m đang gây rắc rối cho bạn.
  3. Ngoài ra, trong Trình kiểm tra tệp (dạng xem Tiện ích) của tệp NIB, trong Tư cách thành viên mục tiêu, bỏ chọn và kiểm tra lại tên mục tiêu.
  4. Khởi động lại Xcode để có biện pháp tốt.
  5. Tất nhiên, chỉ xóa và thêm lại tệp .m cũng sẽ khắc phục được.

(Chỉ riêng bước 1 và bước 2 đã sửa nó cho tôi.)


0

Nếu bạn đã sao chép tệp từ dự án khác, chỉ cần đảm bảo bạn chọn hộp 'Thêm vào mục tiêu'



0

Triệu chứng tương tự, nhưng nguyên nhân khác nhau.

Rõ ràng là tôi đã nhấn phím xóa lùi khi tiêu điểm ở chế độ xem trợ lý, vì một trong những dòng nhận xét của mẫu tệp tiêu chuẩn đi từ // đến / dẫn đến tệp không được biên dịch.

Việc sửa nhận xét đã cho phép SDK phân tích cú pháp tệp, nhận dạng tệp đó là UIViewController và thêm vào ổ cắm.

VẬY - nếu bạn gặp sự cố này, hãy xây dựng hoặc phân tích để xem có lỗi nào cần sửa trong tệp .h của bộ điều khiển chế độ xem của bạn không. SAU ĐÓ hãy thử các giải pháp khác.


0

Đây có thể là một chủ đề cũ nhưng trong trường hợp bất kỳ ai gặp vấn đề tương tự trong tương lai, hãy thử xóa các tệp .xib, .h và .m được liên kết và tạo các tệp mới. Đối với tôi, UIViewController trong tệp .h của tôi không có màu tím và thậm chí backspacing và nhập nó cũng không giúp được gì.


0

Chỉ cần đặt một dòng giữa @implementation và @synthesize. Hầu hết các câu trả lời ở đây đều có điểm chung. Nó đã làm việc cho tôi

@implementation 

@synthesize

0

Tôi vừa thử mọi thứ ở đây và không có gì hoạt động (sử dụng Bản xem trước dành cho nhà phát triển cho Xcode 5).

Điều duy nhất phù hợp với tôi là đưa dòng chưa hoàn chỉnh này vào tệp giao diện của tôi:

@property (nonatomic, weak)

Vì bất kỳ lý do gì, việc thêm cửa hàng và hành động bằng cách kéo và thả từ .xib đã hoạt động tốt sau đó.


0

Đối với tôi, việc dọn dẹp hay xóa DerivedData đã giải quyết được vấn đề.

Tôi đã cố gắng xóa và tạo lại lớp UIViewController của mình nhiều lần và gặp sự cố lặp đi lặp lại.

Sau đó, tôi tạo lại lớp UIViewController và đặt cho nó một tên khác. Điều này giải quyết các vấn đề đối với tôi.


0

Tôi đã gặp sự cố này và tìm thấy một giải pháp không được liệt kê ở trên.

Trong trường hợp của tôi, tôi có thể thấy có điều gì đó không ổn trong tệp .h của lớp vì bộ điều khiển chế độ xem tùy chỉnh của tôi không nhận dạng được lớp: UIViewController (nó có màu đen không phải màu tím). Tất cả các bộ điều khiển chế độ xem tùy chỉnh khác có: UIViewController màu tím.

trong trường hợp của tôi và có thể là của bạn, tôi cần thêm lớp vào danh sách mục tiêu / giai đoạn xây dựng / biên dịch Nguồn thả xuống. .M cần được thêm vào. Tất cả các .m khác đều ở đó nhưng không phải cái này.

Sau khi tôi thêm nó,: UIViewController xuất hiện với màu tím và mọi thứ hoạt động tốt.


0

Đối với trường hợp của tôi, tôi có nhiều dự án với một số phụ thuộc khác. Tôi đã cố gắng giải quyết nó bằng cách xóa dữ liệu có nguồn gốc hoặc khởi động lại XCode nhưng nó không thể hoạt động. Cuối cùng, tôi đã thử phương pháp sau và nó hoạt động:

Chuyển đến target> Build Target Architectures Only> và đặt cả Gỡ lỗi và Phát hành thành KHÔNG.

Đặt điều này cho tất cả các dự án trong không gian làm việc và biên dịch lại để đảm bảo không có lỗi nào khác. Có lẽ không có ý nghĩa nhưng bằng cách nào đó đã làm được. Trong quá trình biên dịch của mình, tôi gặp các vấn đề khác như lỗi trình liên kết và không tìm thấy ký hiệu.


0

Đối với tệp * .m của chế độ xem lớp này, hãy mở "Hiển thị Trình kiểm tra tệp" và bỏ chọn "Mục tiêu thành viên" cho dự án này, sau đó thực hiện Làm sạch (menu Sản phẩm-> Sạch) và kiểm tra lại "Mục tiêu thành viên" cho dự án này

nhập mô tả hình ảnh ở đây


0

Sử dụng Swift, tôi đã gặp vấn đề tương tự. Tôi phát hiện ra rằng các bình luận là một phần của vấn đề đối với tôi.

Tôi đã tận dụng bộ điều khiển chế độ xem mặc định, thực hiện một số hoạt động trong đó, sau đó tạo bộ điều khiển chế độ xem thứ hai bằng cách sao chép toàn bộ bộ điều khiển chế độ xem đầu tiên, loại bỏ nó thành chỉ viewDidLoad () và đổi tên lớp thành TestViewController. Quá trình xây dựng đã hoạt động, mã được thực thi. Tất cả đều tốt.

Khi tôi kéo một UITextField vào để tạo một lối thoát, nó sẽ không cho phép tôi. Tôi nhận thấy rằng nhận xét của tôi vẫn cho biết "ViewController.swift", vì vậy tôi đã thay đổi văn bản nhận xét thành "TestViewController.swift" và xây dựng lại. Tôi đã có thể kết nối ổ cắm của mình!

Tôi tự hỏi liệu điều gì đã xảy ra là Người lập chỉ mục đang đọc các nhận xét cũng như tên lớp, và bằng cách nào đó đã bị nhầm lẫn.


0

Hy vọng điều này sẽ giúp ai đó ngoài kia.

Tôi chỉ cần xóa thư mục dữ liệu có nguồn gốc. Bạn cần nhấp vào Window -> Organizer -> Projects -> Delete Derived Data

VÀ KHỞI ĐỘNG XCODE.

Bạn sẽ được tốt để đi!


0

Lớp mới không thuộc "TARGET" có thể là nguyên nhân gốc rễ của điều này, như được ám chỉ bởi một số câu trả lời này.

Khi tạo một lớp cacao mới, theo mặc định, tùy chọn thêm lớp mới vào mục tiêu được chọn theo mặc định, nhưng vì bất kỳ lý do gì, điều này không được chọn khi bạn nhấn lưu, bạn sẽ gặp sự cố này.

Mục tiêu lớp học mới

Bất kỳ cách giải quyết nào trong số này là thêm lớp mới vào mục tiêu ứng dụng sẽ hoạt động để giải quyết sự cố và là điểm chung của tất cả các 'bản sửa lỗi' này.

Tôi nghĩ rằng XCode có thể có một số lỗi khiến một tệp mới, theo mặc định, KHÔNG được thêm vào mục tiêu chính của ứng dụng. Bản sửa lỗi kết thúc với việc thêm lớp 'bị hỏng' của bạn vào MỤC TIÊU chính


0

Trong XCode 7.1, việc thêm trình kết nối tại một điểm khác trong tệp nguồn của tôi đã hoạt động. Lỗi tôi đã nhận được tham chiếu đến một trong các biến của tôi như thể đó là một lớp (không có ý nghĩa gì). Lỗi đã ngừng xảy ra khi tôi thêm trình kết nối bên dưới biến đó thay vì ở trên nó.


0

Cũng có một lý do khác nhau cho vấn đề này ... nếu bạn đã tạo tệp lớp cacao mới với mẫu khác với ios ... tôi có thể xảy ra ...

Giải pháp sẽ là xóa nó và tạo lại nó với đúng mẫu nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.