我对可可有点陌生,在这里遵循了苹果的例子: 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
希望有人可以提供帮助。