我對這個還是比較陌生的,但是我通過例子幫助我學得非常快。我目前正在考慮從一個正在運行的程序發佈通知到另一個,CFNotificationCenter是前進的方向。唯一的問題是,我無法使用它,除了蘋果的videoviewer,似乎沒有任何例子。CFNotificationCenter用法示例?
會有人能夠提供關於如何設定,讓我可以寫一個應用程序來發布通知迷你例子,一個接受測試的通知和DoSomething的();?任何幫助是極大的讚賞!
我對這個還是比較陌生的,但是我通過例子幫助我學得非常快。我目前正在考慮從一個正在運行的程序發佈通知到另一個,CFNotificationCenter是前進的方向。唯一的問題是,我無法使用它,除了蘋果的videoviewer,似乎沒有任何例子。CFNotificationCenter用法示例?
會有人能夠提供關於如何設定,讓我可以寫一個應用程序來發布通知迷你例子,一個接受測試的通知和DoSomething的();?任何幫助是極大的讚賞!
好吧,我寫了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。
你想使用CFNotificationCenter的,或NSNotificationCenter的例子嗎? CFNotificationCenter是與NSNotificationCenter等效的CoreFoundation;他們做同樣的事情。已經有一個[示例](http://stackoverflow.com/questions/2191594/how-to-send-and-receive-message-through-nsnotificationcenter-in-objective-c)NSNotificationCenter的#2,可以幫助你出。 –