我正在编写一个应用程序,它是一种字典 - 它为用户提供一个术语列表,当点击时,会弹出一个包含定义的对话框。定义本身也可能包含术语,而用户又可以单击这些术语来启动另一个定义弹出窗口。
我的主应用程序存储在“myViewController.m”中。它调用一个自定义 UIView 类“CustomUIView.m”来显示定义(这是弹出的对话框)。这一切都很好。
然后来自 CustomUIView 的文本链接应该能够启动更多定义。在我的 CustomUIView 中点击文本时,它会启动另一个 CustomUIView。问题是,这个新的 CustomUIView 无法访问包含我的所有字典术语和定义的哈希映射;这仅适用于我的主应用程序“myViewController.m”。
不知何故,我需要使我的哈希映射dictionaryHashMap对CustomUIView类的每个实例可见。dictionaryHashMap在应用程序打开时在myViewController.m中创建,此后不会更改。
我不希望限制可以同时打开的 CustomUIView 的数量(我有这样做的理由!),因此将dictionaryHashMap的副本发送到自定义UIView。想必,解决的办法就是让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本地的一个变量......