1

コンパイルするためだけにこのコードを以下に記述しましたが、10.8 の展開ターゲットが必要なため、これは機能しません。

何が起こっているのか EKEventStore にアクセスする必要があるため、誰かがこのアプリをダウンロードすると、10.8 で正常に動作しますが、アプリにはカレンダーへのプライバシー許可がないため、10.9 でダウンロードするとエラーが発生します。これは 10.8 用にコンパイルされているため、メソッド requestAccessToEntityType:EKEntityTypeEvent. にアクセスできません。

これを行うにはどうすればよいですか?

関連するメモとして、10.9 用のコードと 10.8 用の他のコードをコンパイルし、環境に応じてこれらの異なる部分を呼び出すにはどうすればよいですか? これは Mac App Store 用であることを覚えておいてください。もしそうするのであれば、例として説明してください。これをどのように開始すればよいかわからない人と話しているかのように。

    //------------------check authorization of calendars--------------
#if (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1090) || (__IPHONE_OS_VERSION_MIN_REQUIRED)
    if(!eventStore) eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)  //.............put this back in...
     {
         if (granted)
         {   
NSLog(@"granted permission to eventstore!");
            authorizedEventStore = YES;
            authorizedCalendar();
         }
         else
         {
NSLog(@"Not granted");
            authorizedEventStore = NO;
            notAuthorized();
         }
     }];
#else
NSLog(@"not able to request");
    if(!eventStore) eventStore = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent];
    authorizedEventStore = YES;
    authorizedCalendar();
#endif
    //------------------end check authorization of calendars--------------
4

2 に答える 2

2

複数の OS バージョンで実行されるアプリを作成するには:

  • Base SDK をサポートする OS の最新バージョンに設定します。この場合は 10.9 です。
  • 展開ターゲットを、コードを起動する最も古い OS に設定します
  • 以前のバージョンの OS に存在しないすべての呼び出しについては、respondsToSelector: (メソッドの場合) を使用するか、nil に対してテストする (関数と静的の場合) ことにより、呼び出す前にテストする必要があります。必要に応じて OS のバージョンを確認することもできますが、特定の呼び出しを確認する方が確実です。

参照: 新しい Cocoa API を条件付きで使用する方法および 複数のバージョン用にコンパイルするときに、1 つのオペレーティング システム バージョンにのみ存在するメソッドへの呼び出しを含めるにはどうすればよいですか?

于 2013-10-28T11:07:18.397 に答える