4

私はココアに少し慣れていないので、ここでりんごの例に従いました: Open Directory プログラミングガイド

この例では、retain を使用して ODQuery オブジェクトを取得していますが、これはもはや許可されておらず、参照をそのままにしておくようにコンパイラに指示する他の方法が見つかりません。私が理解しているように、 alloc もそれを行いません。

ODQuery が NSRunLoop に渡されると、参照が失われたように見えます。NSRunLoop はそれを query:foundResults:error に渡す必要があります。

コードは次のとおりです (私のコンピューターと同じ名前のグループを探す必要があります)。

NSString *computer = [[NSHost currentHost] localizedName];
NSError *err;

ODQuery *aQuery = [[ODQuery alloc] initWithNode:adNode
                                 forRecordTypes:kODRecordTypeGroups
                                      attribute:kODAttributeTypeRecordName
                                      matchType:kODMatchBeginsWith
                                    queryValues:computer
                               returnAttributes:kODAttributeTypeStandardOnly
                                 maximumResults:0
                                          error:&err];

[aQuery setDelegate:self];
[aQuery scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

adNode と session をプライベート変数として割り当て、init メソッドで割り当てます。

NSError *err;
NSString *nodeName = @"/Active Directory/GU/gu.gu.se";
theSession = [ODSession defaultSession];
adNode = [ODNode nodeWithSession:theSession name:nodeName error:&err];
NSLog(@"Error from initWorker: %@", [err localizedDescription]);

メソッド query:foundResults:error をオーバーライドして、プロトコル ODQueryDelegate を実装しました。NSRunLoop から呼び出されると、ポインター エラーが原因でプログラムがクラッシュします。

- (void)query:(ODQuery *)inQuery foundResults:(NSArray *)inResults error:(NSError *)inError

誰かが助けてくれることを願っています。

4

0 に答える 0