2011-10-24 29 views
9

Trước khi thực hiện bất kỳ loại phát triển iOS 5.0 nào bằng Xcode 4.2, Xcode đã cung cấp mẫu "MainWindow.xib" trong mẫu. Sau khi tải xuống và chơi với Xcode 4.2 với iOS 5.0, tôi nhận thấy rằng không có mẫu nào được cung cấp bao gồm bất kỳ tệp "MainWindow.xib" nào. Chúng ta có cần điều này nữa không? Tôi nhận thấy rằng trong phương thức "application didFinishLaunchingWithOptions" trong App_Delegate rằng các khuôn mẫu bây giờ bao gồm mã tạo ra một số "UIWindow" và nếu bạn có bất kỳ bộ điều khiển điều hướng nào, nó sẽ cập nhật cửa sổ cho phù hợp.MainWindow.xib có thực sự cần thiết trong ứng dụng iOS không?

// code that was pulled from a Master Detail application template 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil]; 
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Tôi đoán câu hỏi của mình là, tôi có cần "MainWindow.xib" nữa không, và nếu có thì tại sao mẫu Apple loại trừ chúng?

Trả lời

4

Tôi nghĩ lý do tại sao nó vắng mặt là việc tạo một cửa sổ lập trình sẽ hiệu quả hơn nhiều so với việc mở một tệp xib và hủy lưu trữ các đối tượng. Nói chung, nếu bạn có thể làm điều đó trong một dòng mã, bạn nên làm điều đó trong mã.

Đọc câu trả lời của Matthew Gillingham để được hướng dẫn về cách thay đổi thủ công một dự án cũ để hoạt động mà không có MainWindow.xib.

+0

Vì vậy, bạn có nghĩ rằng chỉ cần bỏ qua "MainWindow.xib" là con đường để đi cho tất cả các dự án trong tương lai? – 5StringRyan

+2

Vâng, tôi luôn tạo một cửa sổ lập trình cho tất cả các dự án của tôi bởi vì, bạn biết đấy, điều đầu tiên xuất hiện trong cửa sổ được quản lý bởi bộ điều khiển xem. Có một xib chỉ với một cửa sổ và không có gì khác không cung cấp cho bạn bất kỳ lợi thế. – Costique

15

Nó luôn là một tùy chọn không sử dụng MainWindow.xib. Các UIWindow thể được nạp lập trình bởi các cách làm như sau:

1) Đảm bảo rằng cuộc gọi đến UIApplicationMain trong main.m trông như thế này:

UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName"); 

hơn này:

UIApplicationMain(argc, argv, nil, nil); 

2) Đảm bảo rằng Info.plist không có giá trị "MainWindow.xib" làm tệp nib chính.

3) Tải UIWindow theo chương trình trong ứng dụng đại biểu.

Vì vậy, không, bạn không phải sử dụng MainWindow.xib và, trên thực tế, bạn không bao giờ có. Bạn luôn có thể làm mọi thứ theo chương trình.

Đây là câu hỏi hay về việc Apple đã thực hiện thay đổi này trong cài đặt Xcode mặc định và tôi không biết câu trả lời. Nhưng nó có thể có với hiệu suất hoặc chuyển đổi sang ARC hoặc các kích thước tệp ứng dụng nhỏ hoặc hoàn toàn khác.

+0

Có thể cung cấp một số ưu và nhược điểm không? Tôi đoán tôi đang cố gắng tìm ra những gì sẽ là đặt cược tốt nhất di chuyển về việc sử dụng hoặc không sử dụng "MainWindow.xib". – 5StringRyan

+0

Tôi đã suy nghĩ về nó, và tôi thực sự đang gặp vấn đề với quá nhiều ưu điểm. Tôi cho rằng nó cho phép bạn thiết lập một ứng dụng dựa trên thanh tab (hoặc có thể là một bộ điều khiển điều hướng) trong một chút thời trang trực quan hơn vì bạn có thể thao tác chế độ xem vùng chứa trong Interface Builder.Bây giờ khi tôi tạo một ứng dụng thanh tab mới với mẫu, thanh tab chỉ tồn tại trong mã. Nhưng vì nó vẫn còn dễ dàng để tạo và sử dụng bộ điều khiển xem với giao diện Builder, nó khó cho tôi nghĩ rằng nhiều đã bị mất. Tôi có lẽ sẽ di chuyển về phía trước mà không cần sử dụng MainWindow.xib. –

2

Tôi luôn cảm thấy bối rối về việc sử dụng MainWindow.xib: ngay cả với nó tôi vẫn cần phải đặt rootViewController của cửa sổ hoặc addSubview vào nó. Không phải là thông tin đó có trong MainWindow.xib không? Tại sao tôi vẫn cần nói với cửa sổ về điều đó?

Vì vậy, việc xóa MainWindow.xib có vẻ hợp lý.

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