强大的物体被释放

时间:2012-08-25 17:37:50

标签: iphone xcode delegates uitabbarcontroller automatic-ref-counting

我有一个奇怪的问题,我正在尝试将自定义UIView对象设置为具有自定义选项卡栏控制器的委托。标签栏控制器被设置为委托,我肯定它不是nil然后,它实际上是设置的!但是,稍后当自定义UIView执行其任务时,委托是nil。

我正在使用ARC,即使相关的标签栏位于UINavBar中,我也确保该对象很强大,所以它不应该被释放...

我开始认为UITabBar实际上没有被释放,因为它显然仍然存在......我也非常确定我是以适当的方式将其设置为委托。

我将委托设置在UITabViewController所持有的ViewControllers之一的ViewDidLoad中。 以下是我设置委托的方式:

- (void)viewDidLoad
{
    [super viewDidLoad];
    customSearchBar.delegate = (id<SearchResultReceiver>)self.tabBarController;
    //customSearchBar.delegate IS SET, btw tabBarController implements SearchResultReceiver
    ...
}

正如我所说,id委托具有属性(强大,非原子),即使我不相信它需要强大。看起来它应该很弱,因为TabBarController已经由NavigationBarController在其他地方拥有,但是当我看到这个问题时我仍然想要安全。

以下是委托为零的代码,现在我们在CustomSearchBar.m中 不确定它是否重要,当然你已经猜到了,但是...... CustomSearchBar.m是一个UITextFieldDelegate。

以下代码由Communicator对象调用,该对象处理url请求并将传入/传出jsons转换为字典,它工作正常。只是假装通过 - (void)connectionDidFinishLoading:(NSURLConnection *)连接调用以下内容......

-(void)receiveData:(NSDictionary *)dict forMode:(int)mode
{
    [self.delegate receiveSearchResult:dict];
    [spinner stopAnimating];
    [searchConnection cancel];
}

现在代表是零。我没有在代码中的其他位置请求customSearchBar的委托。

其他信息:

CustomSearchBar扩展了UIView,是拥有它的ViewController的IBOutlet。 ViewController由TabBarController拥有,我试图将其设置为委托。

感谢您的时间,如果我能提供更多详细信息,请与我们联系。对于为什么出现问题没有任何线索导致表现不佳:'(sarry!

以下是有关委托合成的更多信息......

#import <UIKit/UIKit.h>
#import "Communicator.h"

@protocol SearchResultReceiver <NSObject>

@optional
-(void) receiveSearchResult:(NSDictionary *) dict;

@end

@interface CustomSearchBar : UIView <UITextFieldDelegate, DataReceiver>
{
    __strong id <SearchResultReceiver> delegate;
}

@property (strong, nonatomic) id<SearchResultReceiver> delegate;
...

在.m我做@synthesize委托;简单地

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了!

这是一个令人沮丧的问题,但我意外地在CustomSearchBars中制作了两个UIViews,我在其中一个中设置了委托,而另一个是活动的:它仍未设置。

我觉得很愚蠢。