Không thể tải NIB trong gói


111

Tôi đang cố gắng tích hợp Janrain Engage dưới dạng mô-đun tùy chỉnh với Appcelerator Titanium. Tôi đã tạo một mô-đun mẫu và kéo thư mục JREngage vào mô-đun mẫu xcodeproj như được chỉ ra trong tài liệu của Jainrain.

Bây giờ tôi cung cấp lệnh xây dựng cho dự án này, sau đó thực hiện ./build.pyvà cuối cùng tôi thực hiện titanium runlệnh. Nó khởi chạy ứng dụng trong trình mô phỏng với một màn hình trống và ngay lập tức bị treo do lỗi sau.

Chấm dứt ứng dụng do không có ngoại lệ 'NSInternalInconsistencyException', lý do: 'Không thể tải NIB trong gói:' NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app> (đã tải) 'với tên' JRProvidersController ''

Tại sao lỗi này có thể xảy ra?

Câu trả lời:


213

Truy cập thuộc tính của tệp .xib trong trình kiểm tra tệp , quảng cáo chiêu hàng thuộc tính "Tư cách thành viên mục tiêu" trên hộp chọn, khi đó tệp xib của bạn đã được liên kết với mục tiêu của bạn


2
Ngoài ra, nếu bạn đang sử dụng bổ sung init, thay vì initWithNibName: bunle:, những gì bạn sẽ nhận được là một màn hình đen.
Robert Childan

Tự hỏi tại sao một tệp .xib hoàn toàn không được sử dụng lại phải treo trong một thư mục tệp dự án…
Ben.

Tôi đoán là tôi đã vô tình bỏ chọn hộp kiểm này thay vì tự động thanh toán. Cố định vụ tai nạn cho tôi, cảm ơn
Yunus Nedim Mehel

tất cả các hộp kiểm mục tiêu thành viên chuyển sang màu xám đối với tôi ... lý do có thể là gì?
Stas

64

Trong Targets -> Build Phases

Đảm bảo rằng .xib được thêm vào Copy Bundle Resources, nếu nó không có thì hãy thêm tệp .xib.


Đã làm cho tôi. Điều này thường xảy ra khi bạn sao chép / nhân bản tệp xib. +1
VoidMain

22

cố gắng tìm ra tất cả

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];

trong mã của bạn và đảm bảo XXXControllerviết đúng chính tả


thật dễ dàng, kể từ khi nibname không autotyped
chings228

1
Ý của anh ấy là tên lớp ngay trước giờ phân bổ, được đóng mẫu tự động: P
Gil Sand

UIView thể được nạp từ ngòi bút nhưng không có initWithNibName:bundle:phương pháp
Vyachaslav Gerchicov

chúng ta đang nói về viewController
chings228

@ chings228 XXXControlloer và XXXController, hãy xem sự khác biệt
Zaporozhchenko Oleksandr

15

Tôi đã gặp sự cố tương tự (ngoại lệ 'Không thể tải NIB trong gói: ..') sau khi nâng cấp xcode của tôi từ 3.2 lên 4.02. Trong khi việc triển khai ứng dụng của tôi với Xcode 3.2 hoạt động tốt thì nó gặp sự cố với xcode 4 nâng cao ngoại lệ được đề cập ở trên - nhưng chỉ khi tôi cố gắng triển khai lên IOS Simulator (v.4.2). Nhắm mục tiêu thiết bị IOS (v.4.1) cũng hoạt động với Xcode 4.

Hóa ra (sau nhiều giờ cố gắng tìm kiếm xung quanh một cách tuyệt vọng) lý do là một cài đặt gần như "ẩn" trong tệp .xib:

Truy cập thuộc tính của tệp .xib trong trình kiểm tra tệp: Thuộc tính 'Vị trí' được đặt thành 'Liên quan đến Nhóm' cho tất cả các tệp .xib. Tôi đã thay đổi nó thành 'Tương đối với dự án' và thì đấy: tất cả các tệp .xib hiện đã được tải chính xác trong trình mô phỏng IOS!

Tôi không biết lý do đằng sau điều đó cho hành vi Xcode4 kỳ lạ này là gì nhưng có lẽ bạn nên thử?


Điều này đã giải quyết một sự cố mà tôi đã gặp phải khi biên dịch một plugin Quartz Composer rất lỗi thời.
Peter Kazazes

12

Trong trường hợp của tôi, nó rất kỳ lạ (sử dụng bảng phân cảnh): Vì một số lý do mà nó đã thay đổi từ "Tên cơ sở tệp bảng phân cảnh chính" thành "Tên cơ sở tệp nib chính" trong bảng phân cảnh.

Thay đổi trở lại "Tên cơ sở tệp bảng phân cảnh chính" (UIMainStoryboardFile) đã giải quyết được sự cố


1
Tốt. Có cùng một vấn đề. Cảm ơn. Điều này đã giải quyết nó.
Rameez Hussain

1
Điều này đã giải quyết vấn đề của tôi! Cảm ơn bạn. Tôi vừa sao chép dự án của mình và đổi tên tất cả các tệp thích hợp. Mọi thứ đều hoạt động nhưng điều này. Bây giờ mọi thứ hoạt động !!
BeccaP

11

lỗi có nghĩa là không có tệp .xib có "JRProvidersController"tên. kiểm tra lại xem có JRProvidersController.xibtồn tại không.

bạn sẽ tải .xib filevới

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];

1
Này Hanuman, tôi đã kiểm tra xem tệp JRProvidersController.xib có tồn tại không. Tôi cũng đã cố gắng đổi tên tệp và thực thi, ngay cả sau đó nó vẫn ném ra cùng một ngoại lệ.
Goje87

thử thay đổi lời gọi thành initWithNibName: NSStringFromClass ([lớp MyViewController]). Ngoài ra, hãy kiểm tra chặt chẽ tên tệp vì nó có phân biệt chữ hoa chữ thường
Hanuman


Tôi đã thực hiện các thay đổi do bạn đề xuất, nhưng không thành công.
Goje87

7

Sử dụng chế độ xem Swift tùy chỉnh trong bộ điều khiển chế độ xem Objective-C (có, ngay cả sau khi nhập <<PROJECT NAME>>-Swift.htệp), tôi đã cố gắng tải nib bằng cách sử dụng:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];

... nhưng NSStringFromClass([MyCustomView class])trả về <<PROJECT NAME>>.MyCustomViewvà tải không thành công. TL; DR Tất cả đều hoạt động tốt khi tải ngòi bằng cách sử dụng một chuỗi ký tự:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];

6

Với mục tiêu xây dựng là một trong các thiết bị iOS của tôi, tôi đã nhấp chuột phải vào tệp Sản phẩm (xyzw.app) và chọn mục bật lên Hiển thị trong Trình tìm kiếm. Nó đã mở ra một cửa sổ với xyzw.app bên trong; Tôi đã mở gói bằng cách sử dụng Hiển thị Nội dung Gói và thấy tất cả các tệp mà tôi mong đợi, ngoại trừ một tệp, tệp mà nó đang phàn nàn, với chữ I viết hoa thay vì chữ i viết thường trong tên (zoomieVIew.nib thay vì zoomieView.nib ). Tôi đã nhận thấy chữ hoa I trong tên tệp của xib, và thay đổi nó và xây dựng lại; rõ ràng Xcode đã để lại tên .nib được tạo như cũ. Tôi đã xóa zoomieVIew.nib trong gói, xây dựng lại và Xcode đã tạo lại tệp một cách hợp lệ dưới dạng zoomieView.nib. Ứng dụng bắt đầu hoạt động trên thiết bị.


điều tương tự ở đây như michael đang mô tả. tôi đã tạo một tệp xib có chứa UITableViewCell tùy chỉnh. khi tôi mở .app và tìm kiếm myCell.xib, tôi thấy nó thực sự là myCell.nib. hơn nữa, ứng dụng chỉ bị lỗi trên thiết bị và tải tệp xib ổn khi thực thi trên trình mô phỏng. nó là một chút khó khăn để thiết lập lại nó. Cho tôi ít nhất. chỉ khi tôi xóa tệp, làm sạch mục tiêu và sao chép tệp trở lại - nó mới hoạt động.
Nir Pengas

đánh dấu lên vì nó cũng cho thấy một cách dễ dàng để tìm và xem nội dung gói
fotisgpap

doh. làm thế nào tôi có thể làm cho mình trở lại với điều này nhờ kind man :) tôi đã ở rất bắt đầu của nghiên cứu vấn đề này
heximal

6

Tôi gặp sự cố này với bảng phân cảnh và ngòi có tên là 'bKD-J3-fhr-view-ZSR-8m-2da'.

Đó là vì tôi đang cố gắng thêm một lượt xem phụ vào self.view trong init của trình điều khiển chế độ xem (withCoder). Self.view chưa tồn tại.

Đã chuyển nó sang viewDidLoad và tất cả tốt hơn!


5

Có cái nhìn về dự án

Target -> Buid Phases -> Copy Bundle Resources

Bạn sẽ tìm thấy xib / storyborad của mình với màu đỏ.

Chỉ cần loại bỏ nó, đồng thời loại bỏ tất cả các tham chiếu của tệp bị thiếu khỏi dự án.

Bây giờ hãy kéo tệp storyboard / xib này một lần nữa Copy Bundle Resources. Nó sẽ vẫn hiển thị cho bạn tệp có màu đỏ nhưng đừng lo lắng về điều đó.

Chỉ cần dọn dẹp và xây dựng dự án.

Bây giờ bạn sẽ có được dự án của bạn chạy lại thành công !!


1
Điều này đã giải quyết được vấn đề của tôi, vì tôi có hai bảng phân cảnh "MyStoryboard.storyboard" và "MyStoryboard ~ ipad.storyboad" ... vì vậy từ mục tiêu iPad, tôi đã xóa "MyStoryboard.storyboard" khỏi "Tài nguyên gói sao chép"
i89

5

Đối với Bảng phân cảnh

Tôi đã thử mọi giải pháp được đăng ở đây nhưng không có gì hiệu quả với tôi vì tôi đang sử dụng Storyboard với Swift 5.

Chỉ mới bắt đầu xây dựng bộ điều khiển và Chế độ xem mới trong ứng dụng kiểm tra bảng phân cảnh, những gì tôi phát hiện là tôi đã thiếu ID bảng phân cảnh của Bộ điều khiển chế độ xem của tôi.

Vì vậy, đây là giải pháp của tôi, Nếu bạn muốn đi từ ViewController A -> View Controller B

Bước 1. Trong bảng phân cảnh: Chỉ cần đảm bảo ViewControllerA của bạn được nhúng trong Bộ điều khiển điều hướng

Bước 2. Trong bảng phân cảnh: Bây giờ hãy kiểm tra xem bạn đã đề cập đến ID bảng phân cảnh cho ViewControllerB của mình mà bạn sẽ sử dụng trong mã làm Định danh chưa.

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

Bước 3. và cuối cùng đảm bảo rằng bạn đang đẩy bộ điều khiển theo cách này trong ViewControllerA bằng cách nhấp vào Nút.

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }

4

KHÔNG ĐẶT .xib KHI BẠN CHÈN TÊN XIB! NÓ CŨNG ĐƯỢC GỢI Ý!

Đừng làm điều này:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];

Làm cái này:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];

4

Ví dụ Swift4 nếu bạn MyCustomView.swiftMyCustomView.xib trong một khuôn khổ. Đặt cái này vào init của MyCustomView :

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 

Cuối cùng! Tôi làm việc trong dự án mô-đun của iOS và đây là những gì tôi đang tìm kiếm. Cảm ơn bạn!
Firda Sahidi

aViewInMyCustomView là gì?
famfamfam,

@famfamfam: một UIView
norbDEV

tks, bây giờ tôi biết cách sử dụng
famfamfam

3

Tôi cũng thấy rằng nó không thành công khi tôi cố gắng tải XIB với tên như @ "MyFile.xib". Khi tôi vừa sử dụng @ "MyFile", nó đã hoạt động - rõ ràng là nó luôn thêm phần mở rộng. Nhưng thông báo lỗi chỉ cho biết nó không thể tìm thấy MyFIle.xib trong gói - nếu nó cho biết MyFile.xib.xib, đó sẽ là một manh mối lớn.


Lý do bạn không được thêm tiện ích mở rộng là trong gói đã biên dịch của bạn, các tệp .xib cũng được biên dịch thành tệp .nib. Vì vậy, thực sự không có MyFile.xib trong gói của bạn, đừng bận tâm đến phần mở rộng kép.
Pieter Jongsma

2

Làm việc trên Xcode 4.6.3 và bản địa hóa các tệp NIB của tôi, tôi cũng gặp sự cố này.

Đối với tôi không có gì khác giúp được ngoài việc thay đổi "Phiên bản tài liệu" trong Trình kiểm tra tệp thành Triển khai 5.0 thay vì 6.1.


2

Nó xảy ra khi bạn đổi tên tệp nib. Nếu bạn đã có, hãy tạo nib mới (nghĩa là sao chép nội dung tệp nib hiện tại sang nib mới), xóa tệp nib cũ và nó sẽ giải quyết được vấn đề của bạn.

Chỉnh sửa: Với Xcode mới bắt đầu từ phiên bản 4.6.3, Nếu bạn đổi tên (với tính năng tái cấu trúc) lớp Bộ điều khiển, nó cũng sẽ đổi tên tệp nib và bạn không cần lo lắng về vấn đề tải nib.


2

Tôi vừa có một trải nghiệm thú vị khi sử dụng Xcode 6.3.

Tôi vẫn gặp lỗi này, mặc dù đã thử mọi thứ bạn thường nghĩ về chính tả, thành viên mục tiêu, v.v. như đã đề xuất ở trên. Tôi cũng đã thử làm sạch, xóa dữ liệu có nguồn gốc và cũng xóa ứng dụng khỏi trình mô phỏng nhiều lần để đảm bảo gói đang được xây dựng chính xác nhưng vô ích.

Cuối cùng, theo câu trả lời của Brian Michael Bentley, cuối cùng tôi đã quyết định kiểm tra tệp .app của mình trong thư mục trình mô phỏng trên HD của tôi. Tôi thấy rằng tất cả các ngòi của tôi đều ở đó nhưng với abc ~ ipad.nib thay vì abc.nib như mong đợi. Tôi đã đổi tên thủ công tất cả các tệp này để loại bỏ phần ~ ipad, được xây dựng và nó hoạt động!

Cố gắng xem tại sao chúng được thêm vào với từ khóa ~ ipad, tôi đã xem cài đặt dự án của mình và trên thực tế, trong tab General> Deployment Info, tôi chỉ chọn iPad. Tôi đang cố gắng chạy trên trình mô phỏng iPhone. Tôi tin rằng trước đây, Xcode sẽ đưa ra lỗi chỉ ra rằng tệp nhị phân không hỗ trợ iPhone và bạn sẽ không chạy ứng dụng thành công.

Tôi đã xóa ứng dụng khỏi trình mô phỏng và làm lại điều tương tự - một lần nữa chỉ với iPad được hỗ trợ. Lần này, .app chứa abc ~ iphone.nib VÀ abc ~ ipad.nib cho mỗi bảng phân cảnh dự kiến ​​và nó chạy tốt trên trình mô phỏng iPhone. Một lần nữa - Nếu chúng tôi chỉ chọn iPad trong cài đặt Thông tin triển khai, nó sẽ không chạy trên Trình mô phỏng iPhone. Đây là một lỗi Xcode.

Vì vậy, có một số hành vi không nhất quán ở đây về phần Xcode và rất tiếc đó là một lỗi không liên tục và lỗi này có thể khó tái tạo, nhưng tôi đặt vấn đề này ở đây để nó có thể giúp ích cho những người khác trong tương lai.


2

Không có vấn đề tương tự nào hoạt động, vì vậy tôi đã tìm ra điều gì đó kỳ lạ với dữ liệu có nguồn gốc.

Trong xcode 6.3.2, tôi phải:

Trong Menu XCode -> Tùy chọn -> Tab Vị trí -> Trong Vị trí, Thay đổi Dữ liệu Bắt nguồn thành Tương đối và sau đó chuyển trở lại Mặc định

Sau đó, ngòi tải tốt.


Tôi vừa xóa thư mục Dữ liệu gốc và nó đã hoạt động. Có vẻ như bị nhầm lẫn vì tôi đã đổi tên tệp xib trong điều hướng dự án. Kỳ lạ.
Kyle Goslan

2

Tệp XIB của bạn có thể nằm ngoài thư mục dự án của bạn. Điều này dẫn đến việc không hiển thị Thanh tra mục tiêu. Tuy nhiên, việc di chuyển tệp XIB vào thư mục dự án của bạn sẽ khắc phục được sự cố.


2

Hãy cẩn thận: Xcode phân biệt chữ hoa chữ thường với tên tệp. Nó không giống như "Vui vẻ" hơn "vui vẻ".


Tên tệp cho nib của tôi là FormItemCheckBoxCell.nib, lớp là FormItemCheckboxCell. Viết hoa "Hộp" trong tên tiêu tốn 45 phút của cuộc đời tôi.
SafeFastExpressive

1

Trong trường hợp bạn đang sử dụng các khuôn khổ trong dự án của mình, bạn cần đảm bảo rằng bạn đang tải từ đúng gói:

NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"];
ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];

1

đối với tôi, nó đã được giải quyết chỉ bằng cách thay đổi tên tệp của ô của tôi thành giống với lớp của nó.

Trong Trình kiểm tra thuộc tính (Tab thứ ba trên thanh bên phải trong bảng phân cảnh):

  1. Đặt Định danh của ô (ví dụ: "MyCellId"),
  2. Đặt Lớp của ô (ví dụ: "MyCellClass" khi tệp là "MyCellClass"),
  3. Đăng ký ô trong bộ điều khiển chế độ xem của bạn như sau:

    tableView.register (UINib (nibName: "MyCellClass", pack: nil), forCellReuseIdentifier: "MyCellId")


0

Gặp sự cố này khi chuyển đổi mã cũ của tôi từ XCode 3x sang XCode 4 và đã giải quyết nó bằng cách đổi tên wwwwwwww.xib thành RootViewController.xib


0

Tôi đã gặp phải vấn đề tương tự. Trong trường hợp của tôi, tên nib là "MyViewController.xib" và tôi đã đổi tên nó thành "MyView.xib". Điều này đã loại bỏ lỗi.

Tôi cũng đang chuyển một dự án từ XCode 3 sang 4.2. Thay đổi loại đường dẫn không quan trọng.


0

Ngoài ra, lý do có thể là tệp được tra cứu trong thư mục ngôn ngữ cụ thể sai khi bạn nhầm lẫn với bản địa hóa.


0

Mỗi khi tôi cấu trúc lại tên của bộ điều khiển chế độ xem trong ứng dụng của tôiDelegate, tôi lại lãng phí thời gian cho việc này. Tái cấu trúc không thay đổi tên nib trong initWithNibName: @ "MYOldViewControllerName".


0

Tôi đã gặp vấn đề tương tự, việc đổi tên mã định danh bộ điều khiển chế độ xem trong bảng phân cảnh đã phù hợp với tôi.


0

Tôi nhận thấy rằng nó có thể xảy ra nếu bạn chuyển đổi giữa các nhánh trong git và quên xóa sạch. Vì vậy, xib ở đó và mọi thứ đều được tìm thấy, nhưng bản dựng chính xác có thể có vấn đề. Vì vậy, đề phòng, đừng quên làm sạch


0
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil];
    [self.navigationController pushViewController:secondViewController animated:YES];

Trong đoạn mã trên, nếu bạn cũng cung cấp một phần mở rộng tệp như "SecondView.xib", thì đó là sai và sẽ cho bạn lỗi ở trên. Sử dụng "SecondView" để thay thế. Tôi đã phạm sai lầm đó.


0

Điều này làm việc cho tôi .. Hãy chắc chắn rằng bạn đã nhập tên ngòi chính xác.

[[NSBundle mainBundle] loadNibNamed: @ "Graphview" chủ sở hữu: tùy chọn tự: nil];

Graphview (tên ngòi)

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.