Đã tải ngòi nhưng ổ cắm 'xem' không được đặt


742

Tôi đã thêm một tệp nib mới vào dự án của mình và cố gắng tải nó.

Tuy nhiên, khi tôi nhấp vào biểu tượng thanh công cụ được cho là sẽ đưa tôi đến chế độ xem mà tôi đã tạo, tôi nhận được NSInternalInconsistencyExceptionthông báo:

Chấm dứt ứng dụng do ngoại lệ chưa được phát hiện 'NSI InternalalInconsistencyException', lý do: '- [UIViewContoder _loadViewFromNibNamed: bundle:] đã tải "..." nib nhưng ổ cắm chế độ xem chưa được đặt.'

Vì vậy, tôi đã mở tập tin ngòi của mình và tôi thấy rằng không có cửa hàng tham chiếu nào được thiết lập. Tuy nhiên, tôi cố gắng nhấp và kéo vòng tròn cho "cửa hàng tham chiếu mới" đến Chủ sở hữu tệp, nhưng nó sẽ không cho tôi ... tôi cần làm gì để hiển thị?


1
Hãy thử làm sạch bản dựng trước.
LetynSOFT

Trong trường hợp của tôi, lỗi thực sự là tôi đã xác định một phương thức trong viewContoder (- (void) setValue: (NSNumber *) value forKey: (NSString *)) ghi đè phương thức ViewContoder gây ra lỗi. Tôi đã giải quyết đổi tên phương pháp này
christian mini

Câu trả lời:


1807

Các bạn nói đúng, nhưng vì tôi là người mới nên tôi phải mất một chút thời gian để tìm ra tất cả các bước để làm điều đó. Đây là những gì làm việc cho tôi:

  • Mở tệp XIB gây ra sự cố
  • Nhấp vào biểu tượng chủ sở hữu của tệp trên thanh bên trái (trên cùng, trông giống như một hộp viền màu vàng)
  • Nếu bạn không thấy thanh bên tay phải, hãy nhấp vào biểu tượng thứ ba ở trên "xem" trên thanh công cụ của bạn. Điều này sẽ hiển thị thanh bên phải
  • Trong thanh bên bên phải, nhấp vào tab thứ ba - trang này trông hơi giống một tờ báo
  • Trong "Lớp tùy chỉnh" ở trên cùng, hãy đảm bảo Class là tên của ViewContoder sẽ tương ứng với dạng xem này. Nếu không, hãy nhập nó
  • Trong thanh bên phải, nhấp vào tab cuối cùng - tab trông giống như một vòng tròn có mũi tên trong đó
  • Bạn sẽ thấy "cửa hàng" với "xem" bên dưới nó. Kéo vòng tròn bên cạnh nó sang biểu tượng "xem" trên thanh bên trái (hình dưới cùng, trông giống như một hình vuông màu trắng với đường viền màu xám dày
  • Lưu xib và chạy lại

Tôi cũng gặp phải vấn đề này trên ca cao và miễn là chế độ xem không được tải / thêm vào hệ thống phân cấp chế độ xem, tất cả các cửa hàng xem là NIL. Sau khi gọi addSubview hoặc một cái gì đó tương tự, tất cả các cửa hàng đã được kết nối. Phần thú vị trong câu chuyện của tôi là po viewcontroll.view.subview cho thấy các đối tượng còn thiếu.
Apoc

11
Giải pháp này không còn hoạt động trong Xcode 7.3 như bước 4 & 5. Thay vào đó, trong trình tạo giao diện, Điều khiển kéo từ chủ sở hữu Tệp vào Chế độ xem của bạn.
PeiweiChen

2
Không làm việc cho tôi (không có phần đầu ra trong thanh tra kết nối, do đó không có "xem" bên dưới các đầu ra để kết nối), nhưng +1 cho nỗ lực bạn đưa vào câu trả lời của mình. :)
William T. Mallard

2
Nếu bạn không thấy "xem" trong các cửa hàng, bạn cũng có thể kéo ctlr từ chủ sở hữu tệp vào chế độ xem trên bảng phân cảnh. Một menu ngữ cảnh sẽ xuất hiện với tùy chọn "xem"
josef

1
@ WilliamT.Mallard Tôi có hành vi tương tự. MyViewControllerlà một lớp con của lớp con của UIViewControllervà không có view"Outlets". Nếu tôi phân lớp MyViewControllertrực tiếp từ UIViewControllerchế độ xem xuất hiện unter "Outlets". Phép thuật hoặc lỗi của Xcode.
user2319066

201

Đây là đề xuất của Josh Justice, nhưng theo cách đồ họa (hình ảnh là của tôi):

  1. Chọn chủ sở hữu tệp
  2. Trên bảng điều khiển bên phải chọn lớp tùy chỉnh.
  3. Nhập tên lớp tùy chỉnh

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

  1. Trên bảng điều khiển bên phải chọn oultets
  2. Kéo xem ổ cắm để xem thành phần

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

Cuối cùng, Bộ điều khiển xem được khởi tạo với mã cuộn:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

1
Cảm ơn Javier Calatrava Llavería ... đã giúp tôi rất nhiều sau khi đánh vào đầu tôi trong một giờ !!!
BharathRao

un exito muchas gracias
Thẻ nhanh Bruno Sosa

Tôi đã bỏ lỡ bước thứ 5
hamada147

73

Tôi thường có thể khắc phục bằng cách làm lại kết nối giữa Chủ sở hữu tệp và chế độ xem. Điều khiển kéo từ chủ sở hữu Tệp vào Chế độ xem của bạn (bằng IB) và chọn chế độ xem từ menu bật lên.


62

Danh tính Chế độ xem - Danh tính lớp không được đặt. Sau khi đặt nó vào lớp thích hợp, vấn đề đã được giải quyết.


Xin chào @John, tôi đã làm điều này nhưng vẫn nhận được ngoại lệ này.
Mansuu ....

29

Bạn có chắc chắn rằng bạn có một UIView (hoặc lớp con) được gán cho thuộc tính "view" của yourViewControll không?

Nhấp chuột phải vào "Chủ sở hữu tệp" trong ngăn bên trái của xib cho trình xem của bạn và xác minh rằng ổ cắm "xem" đã được đặt. Nếu không, hãy đặt nó ở chế độ xem!

điều này chắc chắn sẽ khắc phục vấn đề


2
Câu trả lời rõ ràng, súc tích.
sark9012

15

Đối với tôi tất cả những điều được nêu ở đây https://stackoverflow.com/a/6395750/939501 là đúng nhưng vẫn bị lỗi, lý do là tôi đã tạo một lớp View với tên ABCView và sau đó xóa nó sau đó tôi đã thêm một trình điều khiển xem như là Vì vậy, bằng cách nào đó, nó đã đề cập đến ABCView cũ trong bộ điều khiển chế độ xem mới, tôi đã phải xóa ABCViewContaptor và thêm một cái mới với tên khác đã giải quyết vấn đề của tôi.

Cảm ơn


Vẫn là một lỗi vào năm 2020.
Tamás Sengel

15

Tôi gặp vấn đề tương tự với XCode 4.6.3. Tôi đã bắt đầu với một vài tệp có tên MySettingsView.h.mđã xóa chúng để ủng hộ MySettingsViewController.h, nhưng mặc dù đã thử hầu hết các gợi ý được đề cập ở đây, nó vẫn tiếp tục bị lỗi,

2013 / 07-05 11: 48: 17.205 MyApp [39024: c07] *** Chấm dứt ứng dụng do ngoại lệ chưa được phát hiện 'NSI INTERNalInconsistencyException', lý do: '- [UIViewContoder _loadViewFromNibNamed: bundle:] đã tải "MySinstallView" đã không được thiết lập. '

Rõ ràng là vẫn còn "nhầm lẫn", cố gắng tải MySinstallView.xib thay vì MySinstallView Controller .xib. Có lẽ logic "làm những gì tôi muốn nói" là quá lạ mắt.

Vì vậy, tôi đã giải quyết vấn đề bằng cách mã hóa tên NIB / XIB trong MySinstallViewControll.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

10

Đối với bất kỳ ai đang sử dụng phương pháp xib để tạo UIView và gặp sự cố này, bạn sẽ nhận thấy rằng bạn sẽ không có ổ cắm "xem" trong menu thanh tra kết nối. Nhưng nếu bạn đặt lớp tùy chỉnh Chủ sở hữu tệp thành UIViewControll và sau đó bạn sẽ thấy ổ cắm "xem", bạn chỉ có thể CMND kết nối một ổ cắm với CustomView.


Tuyệt vời. Cảm ơn bạn rất nhiều. Đây phải là một câu trả lời được chấp nhận!
La Mã

7

Vấn đề của tôi với điều này là do có một ngòi trùng lặp trong thư mục lớp không có chế độ xem. xcode dường như đang chọn một ngòi cho một bản dựng và sau đó là cái khác vào lần tiếp theo tôi xây dựng dự án. Chỉ cần xóa cái khác. Có vẻ tốt. Đừng!


6

Chỉ mất hơn một giờ để cố gắng tìm hiểu lý do tại sao thuộc tính xem của tôi không được đặt trong trình điều khiển chế độ xem của tôi khi khởi tạo nó từ nib. Hãy nhớ gọi "[super initWithNibName ...]" bên trong initWithNibName của trình điều khiển xem của bạn.


5

Tôi chỉ sửa cái này trong mỏ. Dự án lớn, hai tập tin. Một cái là "reallyLargeNameView" và cái khác là "reallyLargeNameViewControll"

Dựa trên câu trả lời thứ 2 được chọn ở trên, tôi quyết định tôi nên dọn sạch bản dựng của mình. Nada, nhưng tôi vẫn nghi ngờ XCode (vì tôi có hai lớp giống nhau, nên trừu tượng hóa chúng nhưng eh ...) Vì vậy, một người làm việc, một người thì không. Tên chủ sở hữu của tệp cho đến khi được sao chép và dán, các cửa hàng đã được khôi phục, xCode được khởi động lại, vẫn không có gì.

Vì vậy, tôi xóa lớp có tên tương tự (đó là một khung nhìn). Ngay sau đó, lỗi mới "ổ cắm bên trong không được nối" theo nghĩa đen là "webView không phải là giá trị chính" blah ... về cơ bản là nói "Visual Studio's better". Dù sao ... tôi xóa tập tin có tên nhỏ hơn, và bam, nó hoạt động.

XCode bị nhầm lẫn bởi các tệp có tên tương tự. Và dự án đủ lớn để cần khởi động lại một chút, đó có thể là một phần của nó.

Ước gì tôi có câu trả lời kỹ thuật hơn là "XCode bị nhầm lẫn", nhưng tốt, xCode bị nhầm lẫn rất nhiều vào thời điểm này. Không tin nó giống như cách tôi giúp một đứa trẻ. Nó hoạt động ngay bây giờ, :) Nên có lợi cho người khác nếu những điều trên không khắc phục được gì.

Luôn nhớ để dọn sạch các bản dựng của bạn (bằng cách xóa quá trình giả lập)


4

Tôi cũng gặp vấn đề tương tự và vấn đề của tôi là tôi đã thêm một Bản địa hóa (tiếng Anh) khác vào ngòi nổ ViewControllers để ứng dụng của tôi với Bản địa hóa tiếng Đức có thể tìm thấy ngòi bằng tiếng Anh bản địa hóa !! Hy vọng điều này sẽ giúp bất cứ ai!


4

Tôi đã gặp phải vấn đề tương tự trong khi vô tình xóa tham chiếu xib và thêm nó một lần nữa. Tôi chỉ khắc phục bằng cách tạo kết nối giữa chủ sở hữu Tệp và chế độ xem. Cũng đảm bảo rằng lớp tùy chỉnh của FilesOwner là chế độ xem dự kiến ​​của bạn.


3

Đối với tôi, vấn đề là do gọi điện thoại initWithNibName:bundle:. Tôi đang sử dụng các ô xem bảng từ một tệp nib để xác định các biểu mẫu nhập tableViews. Vì tôi không có quan điểm, không có ý nghĩa gì để kết nối với một người. Thay vào đó, nếu tôi gọi initWithStyle:phương thức thay thế, và từ bên trong đó, tôi tải tệp nib, sau đó mọi thứ hoạt động như mong đợi.


3

Các câu trả lời trước gần như đã giải quyết vấn đề cho tôi, nhưng bước cuối cùng bị thiếu.

  1. Tạo một tệp xib và swift có cùng tên.

Thêm tệp xem và Swift

  1. Đặt chủ sở hữu tệp là lớp con UIView.

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

  1. Kéo một ổ cắm từ Chế độ xem sang lớp con UIView, đặt tên là "contentView"

thêm nội dung

  1. Thêm trình khởi tạo tùy chỉnh này để khi tải xib, nó sẽ đính kèm contentView

thêm nội dung như một cuộc phỏng vấn

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

Bây giờ bất kỳ @IBOutlets bạn thêm sẽ được đính kèm.

Chúc mừng, Richard


2

Tôi đã có cùng một vấn đề, nhưng một giải pháp hơi khác được yêu cầu. Vấn đề trong trường hợp này là lớp của Chủ sở hữu tệp, thay vì lớp của Chế độ xem. Để thiết lập điều này, tôi phải nhấp vào biểu tượng "phát ngược" ở góc dưới bên trái của cửa sổ Trình tạo giao diện và các tùy chọn sau đó xuất hiện tách biệt các đặc điểm của Chủ sở hữu tệp, Phản hồi đầu tiên và Chế độ xem. Nhấp vào cái đầu tiên (một hộp trong suốt lớn), cho phép tôi sau đó đặt lớp tùy chỉnh của nó như được đề xuất ở trên.


2

Tôi đã có cùng một vấn đề, nhưng một giải pháp khác được yêu cầu. Vấn đề trong trường hợp này là lớp của Chủ sở hữu tệp không được kết nối với tệp xib.


2

Tôi đã gặp một cái gì đó rất giống tối nay, với một lớp con Swift UIViewControll. Trong trường hợp này, không có bản sửa lỗi nào ở trên hoạt động, nhưng sắp xếp lại mã của tôi một chút. Net-net, có một phần mở rộng cho lớp con xảy ra trước khi chính định nghĩa của lớp con trong cùng một tệp dường như gây nhầm lẫn cho XCode, mặc dù biên dịch tốt; cách khắc phục là đặt các phần mở rộng sau định nghĩa của lớp con.

Tôi đã đăng chi tiết trong câu trả lời cho câu hỏi tương tự này .


2

Trong trường hợp của tôi, trình khởi tạo được chỉ định - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil trong lớp *** ViewContoder đã được triển khai nên ngay cả khi tôi gọi trình khởi tạo khác để khởi tạo đối tượng, trình khởi tạo được chỉ định sẽ được gọi.

Vì vậy, để giải quyết vấn đề này, kiểm tra thời tiết - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNilcũng là một cách thích hợp.


2

Tôi gặp vấn đề này theo một cách hơi khác so với các câu trả lời khác ở đây.

Nếu tôi chỉ đơn giản tạo một tệp xib mới, đã thêm một UIViewContoder vào nó trong Trình tạo giao diện và đặt lớp tùy chỉnh của UIViewContoder thành trình điều khiển xem của tôi, điều đó dẫn đến sự cố "ổ cắm xem không được đặt". Các giải pháp khác ở đây nói là kiểm soát-kéo ổ cắm xem vào Chế độ xem, nhưng đối với tôi, ổ cắm chế độ xem bị mờ đi và tôi không thể điều khiển kéo nó.

cửa hàng Xem màu xám

Tôi đã nhận ra rằng lỗi của tôi là khi thêm một UIViewContoder trong Trình tạo giao diện. Thay vào đó, tôi đã phải thêm một UIView và đặt Lớp tùy chỉnh của Chủ sở hữu tệp thành trình điều khiển xem của tôi. Sau đó, tôi có thể điều khiển kéo cửa sổ xem của Chủ sở hữu tệp sang chế độ xem mới của mình UIView và mọi thứ hoạt động như bình thường.


1

Chỉ có cùng một lỗi trong dự án của tôi, nhưng lý do khác nhau. Trong trường hợp của tôi, tôi đã có một thiết lập IBOutlet với tên "View" trong lớp UITableViewControll tùy chỉnh của mình. Tôi biết "view" là đặc biệt vì đó là thành viên của lớp cơ sở, nhưng tôi không nghĩ View (trường hợp khác) cũng sẽ là một vấn đề. Tôi đoán một số khu vực của Ca cao không phân biệt chữ hoa chữ thường và có thể tải xib là một trong những khu vực đó. Vì vậy, tôi chỉ đổi tên nó thành DefaultView và bây giờ tất cả đều tốt.


1

chọn chủ sở hữu tệp và goto mở trình kiểm tra danh tính cung cấp tên lớp mà nó tương ứng. Nếu không có phương pháp nào ở trên hoạt động mà bạn vẫn không thể thấy ổ cắm chế độ xem thì hãy cung cấp kết nối ổ cắm tham chiếu mới cho Chủ sở hữu tệp sau đó bạn có thể thấy ổ cắm xem. Nhấp vào khung nhìn Outlet để tạo kết nối giữa View Outlet và chủ sở hữu tệp. Chạy ứng dụng này hoạt động tốt.


1

Trong trường hợp của tôi, chế độ xem không được xem trong xib. trong xib, Chế độ xem là size = none (tab thứ 4 bên tay phải). Tôi đặt kích thước thành Freeform và tải lại xCode. Chế độ xem đã được kháng cáo và tôi đặt liên kết thích hợp thành Xem.


1

Nếu bạn đã thử mọi cách và vẫn gặp lỗi này, hãy thử tạo lại tệp lớp từ đầu nhưng nhớ chọn hộp kiểm "Đồng thời tạo tệp XIB". Điều này sẽ tự động liên kết lên một vài mục không được liên kết khi tạo các tệp này một cách riêng biệt. Sau khi điều này được tạo, bạn có thể cắt và dán mọi thứ lên XIB mới và nó sẽ hoạt động tốt.

Tôi đang tìm thấy vấn đề này cụ thể với việc tạo các tệp riêng biệt trong Swift.


1

đối với tôi nó đã xảy ra, khi

  • Tôi có một lớp ViewContoder (.mm / h) được liên kết với tệp Nib,
  • UIView từ ViewContoder này phải được tải trên một khung nhìn khác dưới dạng một khung nhìn phụ,

  • chúng tôi sẽ gọi một cái gì đó như thế này

    -(void)initCheckView{
    
       CheckView *pCheckViewCtrl = [CheckView instance];
    
       pCheckView = [pCheckViewCtrl view];
    
       [[self view]addSubview:pCheckView];
    
       [pCheckViewCtrl performCheck];        
    
    }

Ở đâu

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

Ở đây loadView bị thiếu ,,, thêm dòng này đã giải quyết vấn đề của tôi.


1

Tôi đã có cùng một vấn đề, tôi đã tìm ra và đó là do tôi đã đánh dấu " Các ô tĩnh " trong các thuộc tính của Chế độ xem bảng trong tùy chọn Nội dung . Làm việc khi nó thay đổi thành " Dynamic Prototypes". Ảnh chụp màn hình bên dưới. nhập mô tả hình ảnh ở đây


1

Tôi gặp vấn đề tương tự với Xcode 9.3 và việc đặt "Mô-đun" trong trình kiểm tra thuộc tính "Chủ sở hữu tệp" thành mô-đun dự án đã khắc phục điều này cho tôi.


1

Mở tệp bảng phân cảnh của bạn nơi tồn tại viewContoder của bạn hoặc tệp liên quan đến XIB với textEdit.app và kiểm tra xem bảng phân cảnh hoặc tên XIB có giống với viewContoder của bạn không, sau đó thay đổi, lưu và tải lại / khởi động lại Xcode.


1

Nếu bạn đang sử dụng phương thức init tùy chỉnh, hãy kiểm tra xem bạn có trả lại thứ gì đó hợp lệ không. Tôi gặp phải một đoạn mã bị lỗi trên một cái gì đó như thế này:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

Trong một lớp khác, bộ điều khiển đã được tạo như vậy:

CustomController *controller = [[CustomController alloc] init];

Vấn đề là trong phương thức init, bản thân đã không thay đổi và thay vào đó sẽ trông như thế này:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}

0

Tôi muốn thứ hai Stephen J. Đôi khi X Code bị lẫn lộn. Tôi vừa có một trải nghiệm mà tôi đã chơi xung quanh với UI rất nhiều, và đã thêm và xóa các cửa hàng khá nhiều lần. Các cửa hàng sẽ không nối dây nữa. Tôi chưa bao giờ tìm ra một lý do cụ thể (tôi đã thử tất cả các giải pháp ở trên) và tôi chỉ phải xóa NIB và tạo lại từ đầu, và trên thực tế phải sử dụng một tên khác cho NIB trước khi nó hoạt động. (XCode 4.6.1) Đã lãng phí một vài giờ về điều đó.

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.