2012-12-11 30 views
11

Tôi vừa thêm hỗ trợ iCloud vào một ứng dụng mà tôi đang làm việc. Nó hoạt động tốt, ngoại trừ khi tôi mở ứng dụng mà không có tài liệu tập trung, hộp thoại mở tập tin iCloud xuất hiện và tôi không muốn nó!iCloud được bật - Dừng tệp mở hiển thị khi khởi chạy ứng dụng?

Trong đại biểu ứng dụng của tôi, tôi có:

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [mainWindowController.window makeKeyAndOrderFront:self]; 
    return NO; 
} 

nào tôi sử dụng để hiển thị cửa sổ tùy chỉnh của riêng tôi. Tuy nhiên, bây giờ, cả hộp thoại mở tập tin iCloud và hộp thoại của riêng tôi đều được hiển thị. Bất kỳ ý tưởng về cách tôi có thể thoát khỏi hộp thoại iCloud?

Default Window

+0

Có ai giải quyết vấn đề này không? Có 3 câu hỏi trong ngăn xếp tràn về điều này và không có câu trả lời nào phù hợp với tôi. – coolcool1994

Trả lời

0
- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [mainWindowController.window makeKeyAndOrderFront:self]; 
    return NO; 
} 

Phần này là đúng. Tôi vừa thử nghiệm nó.

Chỉ cần đảm bảo rằng lớp học này thực sự là ứng cử viên của bạn.

  1. Tạo một lớp mới gọi là prefixAppDelegate
  2. Trong MainMenu.xib của bạn, kéo một đối tượng mới sang một bên và đặt nó là môn học tùy chỉnh để các lớp ứng dụng đại biểu
  3. Nhấp chuột phải Application và kéo từ Ủy quyền xuống đối tượng đại biểu ứng dụng của bạn.
  4. Bây giờ chỉ cần dán đoạn code trên vào ứng dụng của bạn đại diện lớp

Nếu vẫn không được, hãy thử đăng một cái gì đó trong applicationShouldOpenUntitledFile:.

Ngoài ra, tôi khuyên bạn không nên đặt [mainWindowController.window makeKeyAndOrderFront:self]; trong phương pháp này. Bạn nên sử dụng phương thức ủy nhiệm ứng dụng applicationDidFinishLaunching:.

+0

applicationShouldOpenUntitledFile không được gọi và thay vào đó cửa sổ tệp iCloud (ảnh trong câu hỏi gốc) được mở. Nếu tôi vô hiệu hóa iCloud trong khả năng, mọi thứ sẽ hoạt động như mong đợi. Nhưng tôi cần chức năng iCloud và bỏ qua màn hình bật lên tập tin này. – coolcool1994

-1

Tôi gặp sự cố tương tự - hóa ra trong trường hợp của tôi, tôi phải xóa khóa và giá trị NSDocumentClass khỏi Info.plist của mình trong mảng CFBundleDocumentTypes. Chỉ khi đó phương thức applicationShouldOpenUntitledFile: sẽ được gọi và do đó cho phép tôi ngăn cửa sổ iCloud/Document mở.

+0

Tắt tính năng này làm cho ứng dụng dựa trên tài liệu ngừng hoạt động. – coolcool1994

0

Quan sát và sửa lỗi của tôi: [applicationShouldOpenUntitledFile:] sẽ không được thực hiện trừ khi bạn xóa Key NSDocumentClass khỏi * -info.plist. Nhưng điều này có hại nếu ứng dụng của bạn là ứng dụng dựa trên tài liệu, ứng dụng sẽ không mở loại tài liệu bạn đã liên kết. ứng dụng

sửa chữa của tôi là mở cửa sổ tùy chỉnh của tôi trực tiếp trong -(void)applicationWillFinishLaunching:(NSNotification *)notification phương pháp (Application đại biểu)

ETDocumentWindowController *windowController = (ETDocumentWindowController*)get your own window controller here...; 
[windowController.window makeKeyAndOrderFront:nil]; 
2

https://developer.apple.com/library/prerelease/content/releasenotes/AppKit/RN-AppKitOlderNotes/index.html

NSDocument Hỗ trợ cho iCloud

Trong 10.8, NSDocument dựa trên với một tính phổ biến-container-identifiers được hưởng chức năng mới và giao diện người dùng để tạo điều kiện quản lý tài liệu iCloud.Khi iCloud được kích hoạt và ứng dụng được khởi động hoặc kích hoạt lần đầu và không có cửa sổ nào hiển thị hoặc được khôi phục, thay vì tạo tài liệu Chưa có tiêu đề mới, NSDocumentController sẽ hiển thị bảng điều khiển mở không có phương thức hiển thị thư viện iCloud của người dùng.

...

ứng dụng mà không muốn sử dụng các tính năng này cho bất kỳ hoặc tất cả các lớp con NSDocument của họ có thể ghi đè lên + [NSDocument usesUbiquitousStorage] và trở về NO. Nếu tất cả các lớp con NSDocument được khai báo của ứng dụng trả về NO từ phương thức này, thì NSDocumentController sẽ không bao giờ hiển thị bảng điều khiển mở không phương thức mới.

Vì vậy, nếu bạn có thể từ bỏ bằng các tính năng được liệt kê trong ghi chú phát hành này, return NO tại +[NSDocument usesUbiquitousStorage]. Tôi xác nhận rằng bạn vẫn có thể mở/lưu tệp của mình vào bộ nhớ iCloud từ hộp thoại thông thường.

+1

Điều này không hoạt động. useUbiquitousStorage là một biến getter. Bạn không thể ghi đè phương thức này hoặc đặt phương thức này. Và nếu bạn vô hiệu hóa bằng cách nào đó nó sẽ vô hiệu hóa iCloud. Tôi cần một cách để bỏ qua màn hình này khi bật iCloud. – coolcool1994

+0

@ coolcool1994 Nếu bạn định nghĩa lớp NSDocument của mình, tất nhiên bạn có thể ghi đè lên nó. Tôi vẫn có thể sử dụng iCloud như tôi đã nhận xét, nhưng có thể có các thông số ẩn để kiểm soát điều này mà tôi không thể nhận thấy. Tôi đã kiểm tra điều này trên Yosemite Sierra. – ioue

1

Đặt các mã bên dưới trong Đại diện ứng dụng của bạn cho phép bạn bỏ qua iCloud bật lên màn hình Tài liệu mới. Thử nghiệm cho High Sierra.

-(void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    // Schedule "Checking whether document exists." into next UI Loop. 
    // Because document is not restored yet. 
    // So we don't know what do we have to create new one. 
    // Opened document can be identified here. (double click document file) 
    NSInvocationOperation* op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(openNewDocumentIfNeeded) object:nil]; 
    [[NSOperationQueue mainQueue] addOperation: op]; 
} 

-(void)openNewDocumentIfNeeded 
{ 
    NSUInteger documentCount = [[[NSDocumentController sharedDocumentController] documents]count]; 

    // Open an untitled document what if there is no document. (restored, opened).  
    if(documentCount == 0){ 
     [[NSDocumentController sharedDocumentController]openUntitledDocumentAndDisplay:YES error: nil]; 
    } 
}