2013-07-24 29 views
5

Gần đây tôi đã bắt đầu học Objective-C và tôi đã gặp phải một vấn đề nhỏ. Tôi đang cố gắng sử dụng một bộ điều khiển xem tùy chỉnh mà không có một ngòi, do đó, xem được tạo ra trong mã. Chính bộ điều khiển chế độ xem được tạo trong AppDelegate.Tạo một NSViewController tùy chỉnh mà không có một nib

Khi tôi chạy chương trình, trước tiên nó sẽ hiển thị cửa sổ trống mặc định. Sau khi tôi đóng cửa sổ này, một cửa sổ thứ hai bật lên mà chính xác chứa khung nhìn. Tôi rõ ràng không muốn cửa sổ đầu tiên xuất hiện, nhưng tôi không biết nguyên nhân gây ra nó. Thông tin duy nhất tôi có thể tìm thấy về chủ đề này là để phát triển iOS, điều này không hoàn toàn giống nhau.

Tôi cũng nhận được tin nhắn này mà tôi không thực sự chắc chắn những gì nó có nghĩa là: Không thể kết nối orderFrontStandardAboutPanel hành động: để nhắm mục tiêu của lớp MainViewController

appdelegate:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    mainViewController = [[MainViewController alloc] initWithFrame:_window.frame]; 
    _window.contentView = mainViewController.view; 
} 

MainViewController:

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithNibName:nil bundle:nil]; 
    if (self) 
    { 
     [self setView:[[MainView alloc] initWithFrame:frame]]; 
     [self loadView]; 
    } 
    return self; 
} 
+1

Tôi đoán bạn đang gọi loadview 2 lần. 2. loadview một cách rõ ràng. Mục đích của -loadView là, uh, tải chế độ xem. Nó được gọi khi bạn truy cập thuộc tính khung nhìn của trình điều khiển xem và giá trị của thuộc tính đó là 0. Trong trường hợp này, bạn đang truy cập tự SetView trong bộ khởi tạo của bạn, vì vậy đó là khi -loadView được gọi. Một lần nữa bạn đang gọi loadView cụ thể. Đây có thể là một lý do khiến bạn thấy thời gian trống đầu tiên hoặc khi iOS đang tải ứng dụng của bạn, nó hiển thị tải hình ảnh. – Srivathsa

+0

Đó là những gì gây ra nó, cảm ơn! – user2616316

+0

Ok tuyệt vời nó giải quyết vấn đề của bạn .. Sau đó, bạn có thể upvote cho bình luận của tôi. – Srivathsa

Trả lời

14

Tóm lại, ghi đè loadView và đặt self.view cho chế độ xem của bạn. Bạn sẽ muốn cung cấp cho nó một khung trước khi bạn đặt nó.

Việc triển khai mặc định là loadView là nơi cố gắng tải ngòi bút. Bạn dự định sẽ ghi đè điều này nếu bạn không muốn điều đó.

+0

Điều này không hoạt động. Nó gặp sự cố khi truy cập không tốt bất cứ khi nào tôi cố gắng cung cấp cho nó một khung –

+0

@JackyWang Nó hoạt động. Bạn cần khai báo một đối tượng 'NSView' bên trong' loadView', sau đó thiết lập khung của đối tượng đó, sau đó đặt 'self.view' thành đối tượng xem mới của bạn. Nói cách khác, ** không bao giờ ** sử dụng 'self.view.anything' bên trong' loadView' vì 'self.view' chưa tồn tại. – Mahouk

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