我有一个奇怪的问题,我正在尝试将自定义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委托;简单地
答案 0 :(得分:0)
我已经弄清楚了!
这是一个令人沮丧的问题,但我意外地在CustomSearchBars中制作了两个UIViews,我在其中一个中设置了委托,而另一个是活动的:它仍未设置。
我觉得很愚蠢。