4

我对可可有点陌生,在这里遵循了苹果的例子: Open Directory 编程指南

在示例中,他们使用保留来获取 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