2013-01-22 35 views
0

這段代碼旨在在Mac上的iCal中打印我的默認日曆,但返回(null)。我是否需要更改代碼或設置中的某些內容才能訪問我的日曆?我在Xcode 4.5.2中運行這個。在Mac上訪問日曆Objective-C程序

#import <Foundation/Foundation.h> 
#import <EventKit/EventKit.h> 


int main(int argc, const char * argv[]) 
{ 

    EKEventStore *store = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent]; 
    NSLog(@"%@",[store defaultCalendarForNewEvents].calendarIdentifier); 
    return 0; 
} 

回答

0

對我來說,上面的代碼正確地返回了默認日曆的標識符(在10.8.2上)。

您的應用程序是否爲沙盒?其結果將是(null)如果你不允許日曆訪問,同時沙盒:

enter image description here

我不知道這是不可能的,而且檢查是否有選擇默認日曆。 (我有一個選擇,並且無法在Calendar.app中將選擇設置爲無)。

+0

感謝您的建議。我在10.7.5,我認爲這可能是問題,但我不確定你在哪裏找到了允許日曆數據訪問的複選框。這是Xcode中的一個設置嗎? – ripperbone

+0

是的,它是沙箱權利文件中的「com.apple.security.personal-information.calendars」設置。您可以通過轉到目標配置的摘要選項卡來配置沙盒。 [App Sandbox設計指南:快速入門](http://developer.apple.com/library/mac/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxQuickStart/AppSandboxQuickStart.html#//apple_ref/doc/uid/TP40011183-CH2 -SW3)可能會有所幫助。 –

+0

我創建了一個新的Cocoa應用程序(我一直選擇Command Line Tool)時發現了沙箱選項。我確信沙箱模式未被檢查,但仍然沒有運氣。我不認爲應該要求代碼簽名來訪問日曆數據,對吧?我在Xcode中沒有遇到任何錯誤,但是我在控制檯中發現了一條有趣的消息:1/23/13 12:33:50.309上午getEvents:(null) 1/23/13 12:33:50.312 AM com.apple.debugserver- 194:2 +0.172950秒[11f5/1a03]:error::: read(1,0x10a3c9a60,1024)=> -1 err =錯誤的文件描述符(0x00000009) – ripperbone