Xcode không có Bảng phân cảnh và ARC


116

tôi đã tải xuống xcode-5 mới và chỉ bắt đầu sử dụng nó.

Chúng tôi có thể tạo ứng dụng trực tiếp bao gồm bảng phân cảnh và ARC, nó không yêu cầu tùy chọn như các phiên bản trước.

Vì vậy, câu hỏi của tôi là làm thế nào chúng ta có thể sử dụng xcode5 mà không có ARC và bảng phân cảnh. chúng tôi phải xóa tệp bảng phân cảnh theo cách thủ công? hoặc là có bất kỳ lựa chọn nào khác.


3
Không ai thực sự có thể trả lời điều này, nhưng tôi nghĩ Apple đã làm điều đó vì cả Storyboards và ARC đều là tương lai trong việc phát triển ứng dụng với Xcode hoặc Objective-C. Vì Xcode 5 vẫn là bản beta nên có thể họ sẽ thêm hỗ trợ cho nó vào cuối năm nay nhưng tôi nghĩ điều đó sẽ không xảy ra.
ĐÃ

6
Xóa tệp bảng phân cảnh theo cách thủ công và xóa -fobjc-arccờ trình biên dịch trong cài đặt dự án.

19
Các câu hỏi về các công cụ chủ yếu được sử dụng bởi các lập trình viên có rất nhiều chủ đề , với điều kiện là họ không yêu cầu những thứ 'tốt nhất' hoặc các đề xuất 'mua sắm'. Tôi đã mở lại điều này cho phù hợp.
Tim Post

1
Nhưng đây không phải là nơi thích hợp để làm như vậy. Hãy hiểu điều đó.
MZimmerman

3
điều duy nhất tạo nên điều này theo NDA là phần từ "Xcode 5". bất cứ điều gì thực sự được mô tả đều có thể được thực hiện trên các phiên bản trước của Xcode nên về mặt kỹ thuật, chủ đề này có thể tự do thảo luận.
AtomRiot

Câu trả lời:


150

Tạo một dự án với ứng dụng Empty và Thêm bất kỳ bộ điều khiển chế độ xem nào (tôi đã thêm TestViewController tại đây)

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
 {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   // Override point for customization after application launch.
   TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
   UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
   self.window.rootViewController = nav;
   [self.window makeKeyAndVisible];
   return YES;
 }

CÁC BƯỚC ĐỂ XÓA ARC

1) Trong cài đặt xây dựng, đặt Đếm Tham chiếu Tự động thành KHÔNG .

//////////////////////////////////////////////////////// /////////////////////////KẾT THÚC//////////////////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// /////////////////////////

Nếu bạn đã Tạo ứng dụng với bảng phân cảnhARC thì

CÁC BƯỚC ĐỂ XÓA BAN TRUYỆN

1) Xóa tệp Main.storyboard khỏi dự án của bạn.

2) Thêm các tệp mới với xib cho bộ điều khiển của bạn, nếu nó không được thêm vào các nguồn đã biên dịch trong các giai đoạn xây dựng thì hãy thêm vào đó theo cách thủ công.

3) Di chuyển chính tập tin kịch bản tên cơ sở từ plist .

4) Thay đổi tệp appdelegate didFinishLaunchingWithOptions và thêm:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

[self.window makeKeyAndVisible];

giống như :

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

     // Override point for customization after application launch.

     TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
     UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
     self.window.rootViewController = nav;
     [self.window makeKeyAndVisible];

     return YES;
}


Bây giờ, trong ví dụ trên, bạn phải quản lý quản lý bộ nhớ theo cách thủ công như,

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

 [test release]; 

CÁC BƯỚC ĐỂ XÓA ARC

1) Trong cài đặt xây dựng, đặt Đếm Tham chiếu Tự động thành KHÔNG .


7
Không có tùy chọn "dự án trống" nào nữa? Tôi không nghĩ rằng tôi sẽ bắt đầu sử dụng bảng phân cảnh.
Sulthan

1
Đảm bảo thay đổi cài đặt "Giao diện chính" của Target thành gốc mới <View Controller>.
Paul Brady

bạn nói đúng @Sulthan, chúng tôi có thể làm điều đó bằng dự án trống, nhưng đây là những thay đổi nếu tôi đã có ứng dụng dựa trên chế độ xem. (chúng ta phải loại bỏ một số mã kịch bản bằng tay từ tập tin appdelegate) trong khi trong ứng dụng rỗng chúng ta phải thêm mã mới trong đó :)
PJR

Tôi đã xem qua một tập lệnh sẽ thêm tùy chọn để xóa bảng phân cảnh trở lại: stackoverflow.com/a/19792955/329928
Chris Leyva

tại sao điều hướng UINavigationController * không được tự động phát hành? và chúng ta có nên sử dụng _window trong [UIWindow Distribution] không?
hariszaman

44

Thay vì xóa tệp bảng phân cảnh, bạn có thể Tạo dự án mới với mẫu Ứng dụng trống. Để bạn có thể tránh được việc tạo tệp bảng phân cảnh.

Sử dụng các bước sau để bỏ qua bảng phân cảnh: nhập mô tả hình ảnh ở đây

  1. Tạo một dự án mới với mẫu Ứng dụng trống.
  2. Thêm một viewController mới (Ví dụ LoginViewController:)
  3. Thay đổi tệp didFinishLaunchingWithOptionstrong AppDelegate.mtệp như được chỉ định bên dưới.

Thay đổi thành:

#import "LoginViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Xóa ARC: Đi tới Cài đặt bản dựng -> Đếm tham chiếu tự động Objective-C -> KHÔNG


1
Chà! Hoạt động như một sự quyến rũ và đơn giản hơn nhiều so với câu trả lời được chấp nhận. Tôi chỉ cần đảm bảo thay đổi tất cả các tham chiếu LoginViewControllerđể khớp với tên bộ điều khiển của riêng tôi.
JohnK

11

tạo dự án mới

![Tạo dự án mới]

xóa tên cơ sở của bảng phân cảnh chính trong Thông tin

// xóa tên cơ sở của tệp bảng phân cảnh chính trong Thông tin

Thêm mã này trong appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Sau đó, tự động xóa bảng phân cảnh của bạn.

Vui lòng thử điều này ... đã thực hiện thành công. cảm ơn


5

ShortCut: Tôi thích

Tạo dự án mà không có Bảng phân cảnh và ARC trong xcode4 và sau đó mở dự án đó trong xcode5.


1
Giữ một phiên bản Xcode cũ hơn chỉ vì điều đó là không đáng. Tôi muốn tạo một dự án mới, loại bỏ những thứ trong Storyboard, thêm khởi tạo UIWindow trong appDelegate và lưu nó dưới dạng một dự án mẫu cho sau này.
kervich

3

Xcode 4 có hộp kiểm "Sử dụng Bảng phân cảnh" khi bạn tạo một dự án mới. Có thể lấy các mẫu ứng dụng Xcode 4 cũ (tệp XML) và chuyển đổi chúng thành Xcode 5. Bằng cách đó, bạn lấy lại các mẫu cũ cho phép bạn chọn xem bạn có muốn bảng phân cảnh hay không.


Tôi đã viết một tập lệnh thực hiện tất cả những công việc đó cho bạn: https://github.com/jfahrenkrug/Xcode4templates


Sau khi chạy tập lệnh, bạn sẽ có phần "Xcode 4" trong màn hình "Dự án mới":

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

Và sau đó - Chao ôi! - bạn lấy lại những lựa chọn yêu thích của mình:

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

Bạn sẽ cần một bản sao của gói .app Xcode 4 từ http://developer.apple.com/ios để sử dụng tập lệnh này.


1
Tuy nhiên, các mẫu đó đã cũ và không tận dụng được tất cả các thay đổi mới có sẵn, chẳng hạn như -registerClass: forCellReuseIdentifier :.
mahboudz

@mahboudz Đó là sự thật. Bạn cần phải điều chỉnh nếu chức năng đó quan trọng đối với bạn. Tất nhiên, tôi hy vọng rằng Apple sẽ mang lại tùy chọn chọn không tham gia Storyboards trong bản phát hành Xcode trong tương lai.
Johannes Fahrenkrug

1
Tôi cũng mong là như vậy. Giống như bạn, tôi sử dụng Storyboard trong các ứng dụng nhỏ hơn, chủ yếu là do sự phát triển TableView nhanh chóng, nhưng trong các ứng dụng lớn hơn, Storyboard là một vấn đề lớn. Từ cuộn xung quanh, để ghi nhớ các ID segue (họ phải thêm một cách để sử dụng #defines hoặc const NSString * giữa các Storyboards và tệp nguồn), để thực hiện giải quyết xung đột git và hơn thế nữa, Storyboards không phải là tất cả và kết thúc tất cả.
mahboudz

những mũi tên V / A mặc dù.
John Riselvato

1
@JohnRiselvato Bạn nói đúng :) Những mũi tên đáng ghét giờ đã biến mất :)
Johannes Fahrenkrug

0

Tôi có một Mẹo:

  1. Đầu tiên: Tôi tạo dự án của mình bằng XCode 4.6 (Vì phiên bản này gần với XCode 5 nhất).
    • Tất nhiên với XCode 4.6, bạn có thể chọn sử dụng hoặc không sử dụng ARC, Storyboard.
  2. Thứ hai: Sau đó tôi sẽ mở Dự án của mình bằng XCode 5. => Tôi nghĩ rằng Xcode 5 sẽ hiểu rằng dự án đó sử dụng nonARC và tất nhiên, không có Storyboard.

Tôi hy vọng dự án của bạn sẽ hoạt động! : D

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.