2012-11-11 15 views

Trả lời

0

Không, không có cách nào để khởi động lại ứng dụng iOS theo chương trình. Vòng đời của ứng dụng được điều khiển bởi hệ điều hành.

5

Lưu ý:

Mặc dù điều này đã được xuống bình chọn tôi nghĩ rằng đó là một câu hỏi hoàn toàn hợp lệ cho một nhà phát triển mới iOS để hỏi. Có một cách để 'khởi động lại' ứng dụng của bạn từ góc nhìn của người dùng không phải là về mặt kỹ thuật khởi động lại hoặc thoát khỏi Ứng dụng iOS. Như được chỉ ra bởi các câu trả lời khác, Ứng dụng iOS sẽ không bao giờ thoát một cách rõ ràng vì điều này không được phép trên iOS.

trả lời của tôi:

Nếu bạn muốn ứng dụng của bạn trở lại trạng thái đó là trong lúc khởi động này không phải là 100% có thể nhưng tôi sẽ giải thích một cách để có được hầu hết các cách đó mà nên là đủ cho tất cả các mục đích hợp lệ.

Việc đầu tiên cần làm là tạo lại bộ điều khiển chế độ xem gốc của bạn. Tôi khuyên bạn nên làm điều này từ một phương pháp trong các đại biểu ứng dụng như thế này:

- (void)resetAppToFirstController 
{ 
    self.window.rootViewController = [[MyMainViewController alloc] initWithNibName:nil bundle:nil]; 
} 

Trong nhiều trường hợp này sẽ là đủ, nhưng bất kỳ ứng dụng trạng thái mà bạn có cũng nên được đặt lại trong phương pháp này. Ví dụ, đăng xuất một người dùng, thiết lập lại bất kỳ trạng thái không liên tục nào và hủy bỏ (release) tất cả các đối tượng mà bạn có thể. Phương pháp này cũng có thể được sử dụng để tạo bộ điều khiển xem đầu tiên của bạn từ application:didFinishLaunchingWithOptions.

lớp Framework và Singletons:

Bạn sẽ không thể đặt lại toàn bộ nhà nước của bất kỳ độc thân khuôn khổ hoặc cho mỗi ứng dụng trường hợp, chẳng hạn như những:

[UIApplication sharedApplication]; 
[NSNotificationCenter defaultCenter]; 
[NSUserDefaults standardUserDefaults]; 
[UIScreen screens]; 
// etc... 

Đó có lẽ là tốt vì bạn không nên lưu trữ bất kỳ trạng thái không liên tục nào trong các trường hợp này (ngoại trừ NSNotificationCenter, nhưng tất cả các quan sát viên đã đăng ký phải được loại bỏ khi các đối tượng được phát hành). Nếu bạn muốn khởi tạo hoặc đặt lại bất kỳ trạng thái khung công tác nào, bạn có thể thực hiện theo cùng phương thức resetAppToFirstController. Dù sao, không cần phải tạo lại chúng, hoặc đối tượng window.

Nếu bạn có bất kỳ người độc thân nào của mình, bạn có thể tạo lại chúng bằng cách lưu trữ chúng trong một lớp người giữ đơn (bản thân nó là một singleton thực). Về mặt khái niệm, đây là một lớp singleton đơn giản với các thuộc tính cho mỗi người khác của bạn và một phương thức reset để vô hiệu hóa và giải phóng tất cả chúng. Các singletons khác của bạn nên sử dụng lớp này (thay vì một biến tĩnh hoặc toàn cầu) để lưu trữ các cá thể singleton. Hãy cẩn thận nếu bạn sử dụng bất kỳ thư viện của bên thứ ba nào vì họ cũng có thể sử dụng đơn và bạn cần đảm bảo chúng cũng sử dụng trình giữ đơn để bạn có thể đặt lại chúng khi cần. Tôi nghĩ rằng kỹ thuật này là thực hành tốt anyway, bởi vì trong một số trường hợp (ví dụ như thử nghiệm đơn vị), bạn muốn các đối tượng mà thường là singletons để đi xa và reinitialise đến một trạng thái nguyên sơ.Tuy nhiên, bạn không muốn ghép đôi việc triển khai singleton với người giữ đơn của bạn, do đó, cách tốt để thực hiện điều này là sử dụng một đối tượng liên kết trên [UIApplication sharedApplication] với tên lớp đơn là khóa. Tuy nhiên, tôi sẽ rời khỏi chủ đề một chút vì đây là một kỹ thuật tiên tiến hơn ngoài phạm vi của câu hỏi này.


Ở trên phải đủ để 'đặt lại' ứng dụng của bạn cho đến khi người dùng quan tâm. Bạn thậm chí có thể hiển thị lại màn hình giật gân nếu bạn muốn làm bộ điều khiển xem đầu tiên của mình.

+0

http://stackoverflow.com/a/30647435/793880 này –