-1

カスタム UIView オブジェクトにカスタム タブ バー コントローラーであるデリゲートを設定しようとしているという奇妙な問題があります。タブバーコントローラーはデリゲートとして設定されていますが、それは nil ではなく、実際には設定されていると確信しています! ただし、後でカスタム UIView がそのタスクを実行すると、デリゲートは nil になります。

私はARCを使用しており、問題のタブバーがUINavBar内にあるにもかかわらず、オブジェクトが強いことを確認したので、解放されるべきではありません...

UITabBar が実際に解放される方法はないと考え始めています。これは明らかにまだ存在しているためです...また、適切な方法でデリゲートとして設定していると確信しています。

UITabViewController が保持する ViewController の 1 つの ViewDidLoad 内にデリゲートを設定します。デリゲートを設定する方法は次のとおりです。

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

私が言ったように、id デリゲートは、強い必要があるとは思いませんが、プロパティ (strong、nonatomic) を持っています。TabBarController はすでに NavigationBarController によって別の場所に所有されているため、弱いはずですが、この問題を見たときに安全を確保したかったのです。

これはデリゲートが nil のコードです。今は CustomSearchBar.m です。それが重要かどうかはわかりませんが、ご想像のとおりですが... CustomSearchBar.m は UITextFieldDelegate です。

次のコードは、URL 要求を処理し、着信/発信 json を辞書に変換する Communicator オブジェクトによって呼び出され、正常に動作しています。以下が -(void)connectionDidFinishLoading:(NSURLConnection *)connection... によって呼び出されるふりをしてください...

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

現在、デリゲートは nil です。コードの他の場所では、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;
...

.mi では @synthesize デリゲートを実行します。単に

4

1 に答える 1

0

私はそれを理解しました!

これは苛立たしい問題でしたが、誤って2つのUIViewをCustomSearchBarsに作成し、一方にデリゲートを設定していましたが、もう一方はアクティブなものでした。設定されていないままでした。

私は愚かだと感じます。

于 2012-08-26T23:57:54.200 に答える