私は一種の辞書であるアプリを書いています - ユーザーに用語のリストを提示し、クリックすると定義を含むダイアログボックスをポップアップします。定義自体にも用語が含まれている場合があり、ユーザーはそれをクリックして別の定義ポップアップを起動できます。
私のメインアプリは「myViewController.m」に保存されています。カスタム UIView クラス 'CustomUIView.m' を呼び出して、定義を表示します (これは、ポップアップするダイアログ ボックスです)。これはすべてうまくいきます。
CustomUIView からのテキスト リンクは、より多くの定義を起動できるはずです。CustomUIView でテキストがタップされると、別の CustomUIView が起動します。問題は、この新しい CustomUIView が、辞書のすべての用語と定義を含むハッシュ マップにアクセスできないことです。これは、私のメイン アプリ 'myViewController.m' でのみ利用できます。
どうにかして、ハッシュ マップのDictionaryHashMap を CustomUIViewクラスのすべてのインスタンスから見えるようにする必要があります。アプリを開いたときにDictionaryHashMap が myViewController.mに作成され、その後は変更されません。
同時に開くことができる CustomUIViews の数を制限したくありません (これを行う理由があります! ) 。 CustomUIView. おそらく、解決策はDictionaryHashMapをグローバル変数にすることです。
私のコードの一部:
myViewController.m から:
- (void)viewDidLoad
{
self.dictionaryHashMap = [[NSMutableDictionary alloc] init]; // initialise the dictionary hash map
//... {Code to populate dictionaryHashMap}
}
// Method to pop up a definition dialog
- (void)displayDefinition:(NSString *) term
{
NSArray* definition = [self.dictionaryHashMap objectForKey:term]; // get the definition that corresponds to the term
CustomUIView* definitionPopup = [[[CustomUIView alloc] init] autorelease]; // initialise a custom popup
[definitionPopup setTitle: term];
[definitionPopup setMessage: definition];
[definitionPopup show];
}
// Delegation for sending URL presses in CustomUIView to popupDefinition
#pragma mark - CustomUIViewDelegate
+ (void)termTextClickedOn:(CustomUIView *)customView didSelectTerm:(NSString *)term
{
myViewController *t = [[myViewController alloc] init]; // TODO: This instance has no idea what the NSDictionary is
[t displayDefinition:term];
}
CustomUIView.m から:
// Intercept clicks on links in UIWebView object
- (BOOL)webView: (UIWebView*)webView shouldStartLoadWithRequest: (NSURLRequest*)request navigationType: (UIWebViewNavigationType)navigationType {
if ( navigationType == UIWebViewNavigationTypeLinkClicked ) {
[myViewController termTextClickedOn:self didSelectTerm:request];
return NO;
}
return YES;
}
DictionaryHashMap を CustomUIViewに表示する方法に関するヒントは大歓迎です。
次のようにして、 DictionaryHashMapをグローバルにしようとしました。
- 「self.dictionaryHashMap」のすべてのインスタンスを「dictionaryHashMap」に変更する
- 「extern NSMutableDictionary *dictionaryHashMap;」という行を追加します。CustomUIView.hに
- myViewController.mの実装の外側に次を追加します: 'NSMutableDictionary *dictionaryHashMap = nil;'
ただし、dictionaryHashMap は CustomUIView から見えないままです。私が知る限り、実際にはmyViewControllerにローカルな変数のままです...