2010-11-21 27 views
10

Có cách nào để thực hiện việc này không? Tôi đăng ký đối tượng của tôi cho UIPasteboardChangedNotification lúc khởi động, nhưng khi gửi nó đến nền và mở (ví dụ) Safari và sao chép một số văn bản, trình xử lý của tôi không bao giờ được gọi. (Tôi chỉ sử dụng trình mô phỏng ngay bây giờ).Nhận thông báo UIPasteboard (chungPasteboard) trong khi đang ở chế độ nền

Tôi đã sử dụng cả hai:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(pasteboardNotificationReceived:) 
    name:UIPasteboardChangedNotification 
    object:[UIPasteboard generalPasteboard]]; 

và:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(pasteboardNotificationReceived:) 
    name:UIPasteboardChangedNotification 
    object:nil ]; 

đăng ký xử lý của tôi.

+0

Bạn đã bao giờ có được điều này được giải quyết? Tôi cũng đang cố gắng thực hiện điều này. http://cl.ly/69a4 Nếu bạn đã tìm thấy câu trả lời, bạn có muốn chia sẻ nó với tôi không? – Frankrockz

Trả lời

11

Tôi đã gặp vấn đề tương tự. Theo tài liệu UIPasteboard Class Reference cho changeCount tài sản (nhấn mạnh là của tôi):

Bất cứ khi nào nội dung của một sự thay đổi-đặc biệt tông, khi mục tông được bổ sung, sửa đổi, hoặc increments loại bỏ-UIPasteboard giá trị của tài sản này. Sau khi tăng số lượng thay đổi, UIPasteboard đăng thông báo có tên UIPasteboardChangedNotification (để bổ sung và sửa đổi) và UIPasteboardRemovedNotification (để xóa). ... Lớp này cũng cập nhật số thay đổi khi một ứng dụng kích hoạt lại và một ứng dụng khác đã thay đổi nội dung của bảng. Khi người dùng khởi động lại thiết bị, số lượng thay đổi được đặt lại về 0.

Tôi đã đọc điều này có nghĩa là ứng dụng của tôi sẽ nhận được thông báo UIPasteboardChangedNotification sau khi ứng dụng của tôi được kích hoạt lại. Tuy nhiên, một cách đọc cẩn thận cho thấy rằng nó chỉ là changeCount được cập nhật khi ứng dụng được kích hoạt lại.

Tôi đã giải quyết vấn đề này bằng cách theo dõi số changeCount của đại lý trong ứng dụng và đăng thông báo dự kiến ​​khi tôi tìm thấy changeCount đã được thay đổi trong khi ứng dụng ở chế độ nền.

Trong giao diện ứng dụng đại biểu của:

NSUInteger pasteboardChangeCount_; 

Và trong việc thực hiện các ứng dụng đại biểu của:

- (BOOL)application:(UIApplication*)application 
    didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(pasteboardChangedNotification:) 
    name:UIPasteboardChangedNotification 
    object:[UIPasteboard generalPasteboard]]; 
    [[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(pasteboardChangedNotification:) 
    name:UIPasteboardRemovedNotification 
    object:[UIPasteboard generalPasteboard]]; 

    ... 
} 

- (void)pasteboardChangedNotification:(NSNotification*)notification { 
    pasteboardChangeCount_ = [UIPasteboard generalPasteboard].changeCount; 
} 

- (void)applicationDidBecomeActive:(UIApplication*)application { 
    if (pasteboardChangeCount_ != [UIPasteboard generalPasteboard].changeCount) { 
    [[NSNotificationCenter defaultCenter] 
    postNotificationName:UIPasteboardChangedNotification 
    object:[UIPasteboard generalPasteboard]]; 
    } 
} 
+0

Nó hoạt động NHƯNG giải pháp này không thể theo dõi các thông báo trong ứng dụng của bạn là dưới nền, nó chỉ được kích hoạt khi bạn phản ứng ứng dụng của bạn. –

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