ARK窃取我的引用对象(OF Query)?

时间:2012-11-16 14:56:51

标签: cocoa automatic-ref-counting directoryservices

我对可可有点新鲜,并且在这里跟着苹果示例: 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

希望有人可以提供帮助。

0 个答案:

没有答案