我对可可有点新鲜,并且在这里跟着苹果示例: Open Directory programming guide
在示例中,他们使用retain来获取ODQuery对象,这是不允许的,我找不到任何其他方式告诉编译器单独留下我的引用。据我所知,alloc也没有这样做。
当ODQuery传递给NSRunLoop时,参考似乎丢失了,而NSRunLoop又将其传递给查询: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]);
我通过覆盖方法查询实现了协议ODQueryDelegate:foundResults:error。当它从NSRunLoop调用时,程序因指针错误而崩溃。
- (void)query:(ODQuery *)inQuery foundResults:(NSArray *)inResults error:(NSError *)inError
希望有人可以提供帮助。