2011-08-06 75 views
4

我對這個還是比較陌生的,但是我通過例子幫助我學得非常快。我目前正在考慮從一個正在運行的程序發佈通知到另一個,CFNotificationCenter是前進的方向。唯一的問題是,我無法使用它,除了蘋果的videoviewer,似乎沒有任何例子。CFNotificationCenter用法示例?

會有人能夠提供關於如何設定,讓我可以寫一個應用程序來發布通知迷你例子,一個接受測試的通知和DoSomething的();?任何幫助是極大的讚賞!

+1

你想使用CFNotificationCenter的,或NSNotificationCenter的例子嗎? CFNotificationCenter是與NSNotificationCenter等效的CoreFoundation;他們做同樣的事情。已經有一個[示例](http://stackoverflow.com/questions/2191594/how-to-send-and-receive-message-through-nsnotificationcenter-in-objective-c)NSNotificationCenter的#2,可以幫助你出。 –

回答

9

好吧,我寫了CFNotificationCenter的一個小例子。通常,沒有人使用CoreFoundation來處理大型項目,而是使用Foundation。如果你真的在Objective-C中編寫這個項目(就像我從你的標籤中假設的那樣),我會建議使用NSNotificationCenter。沒有進一步的補充,這裏是例子:

#include <CoreFoundation/CoreFoundation.h> 

void notificationCallback (CFNotificationCenterRef center, 
          void * observer, 
          CFStringRef name, 
          const void * object, 
          CFDictionaryRef userInfo) { 
    CFShow(CFSTR("Received notification (dictionary):")); 
    // print out user info 
    const void * keys; 
    const void * values; 
    CFDictionaryGetKeysAndValues(userInfo, &keys, &values); 
    for (int i = 0; i < CFDictionaryGetCount(userInfo); i++) { 
     const char * keyStr = CFStringGetCStringPtr((CFStringRef)&keys[i], CFStringGetSystemEncoding()); 
     const char * valStr = CFStringGetCStringPtr((CFStringRef)&values[i], CFStringGetSystemEncoding()); 
     printf("\t\t \"%s\" = \"%s\"\n", keyStr, valStr); 
    } 
} 

int main (int argc, const char * argv[]) { 
    CFNotificationCenterRef center = CFNotificationCenterGetLocalCenter(); 
    // add an observer 
    CFNotificationCenterAddObserver(center, NULL, notificationCallback, 
            CFSTR("MyNotification"), NULL, 
            CFNotificationSuspensionBehaviorDeliverImmediately); 
    // post a notification 
    CFDictionaryKeyCallBacks keyCallbacks = {0, NULL, NULL, CFCopyDescription, CFEqual, NULL}; 
    CFDictionaryValueCallBacks valueCallbacks = {0, NULL, NULL, CFCopyDescription, CFEqual}; 
    CFMutableDictionaryRef dictionary = CFDictionaryCreateMutable(kCFAllocatorDefault, 1, 
                    &keyCallbacks, &valueCallbacks); 
    CFDictionaryAddValue(dictionary, CFSTR("TestKey"), CFSTR("TestValue")); 
    CFNotificationCenterPostNotification(center, CFSTR("MyNotification"), NULL, dictionary, TRUE); 
    CFRelease(dictionary); 
    // remove oberver 
    CFNotificationCenterRemoveObserver(center, NULL, CFSTR("TestValue"), NULL); 
    return 0; 
} 

這個例子創建一個觀察者,發佈一個簡單的字典給它,並刪除觀察者。有關CFNotificationCenter的更多信息,請訪問Apple's CFNotificationCenter Reference

+0

謝謝你,這些零零碎碎的東西正是我正在尋找的東西,現在我明白它是如何工作的。我在兩個應用程序之間執行此操作,所以我使用CFNotificationCenterGetDistributedCenter而不是本地應用程序。但除此之外,謝謝! – Tiago

+0

當我剪切/粘貼到的XCode 7.1,也不會編譯和在'&鍵[I]'表示「指針不完全型‘const的無效’的下標」和'&值[I]'的'notificationCallback的( )'功能。 – Volomike