[英]Using objective-c objects with an NSDictionary
我想針對UILabel存儲URL,以便當用戶觸摸標簽時將其帶到UIWebView中的URL。
我已經這樣聲明了NSDictionary:
NSMutableArray *linksArray = [[NSMutableArray alloc] init];
[linksArray addObject: [NSValue valueWithNonretainedObject: newsItem1ReadMoreLabel]];
[linksArray addObject: [NSValue valueWithNonretainedObject: newsItem2ReadMoreLabel]];
[linksArray addObject: [NSValue valueWithNonretainedObject: newsItem3ReadMoreLabel]];
[linksArray addObject: [NSValue valueWithNonretainedObject: newsItem4ReadMoreLabel]];
[linksArray addObject: [NSValue valueWithNonretainedObject: newsItem5ReadMoreLabel]];
//NSString *ageLink = @"http://www.theage.com.au";
NSArray *defaultLinks = [NSArray arrayWithObjects: @"1", @"2", @"3", @"4", @"5", nil];
self.urlToLinkDictionary = [[NSMutableDictionary alloc] init];
self.urlToLinkDictionary = [NSDictionary dictionaryWithObjects:defaultLinks forKeys:linksArray];
考慮到我使用NSValue
作為鍵,考慮到我僅對UILabels的引用,如何獲取/設置與該鍵關聯的URL?
這是我所擁有的,但是不起作用:
for(NSValue *key in [self.urlToLinkDictionary allKeys])
{
if ([key nonretainedObjectValue] == linkedLabel)
{
[self.urlToLinkDictionary setValue:[newsItem link] forKey: key];
}
}
但出現錯誤:“ objc_exception_throw”已解決
這兩行是導致此問題的原因:
self.urlToLinkDictionary = [[NSMutableDictionary alloc] init];
self.urlToLinkDictionary = [NSDictionary dictionaryWithObjects:defaultLinks forKeys:linksArray];
首先,您給屬性分配一個可變數組。 然后,將另一個不可變數組分配給該屬性。 您最初的可變數組泄漏,因為您沒有釋放它。
異常是由以下行引起的:
[self.urlToLinkDictionary setValue:[newsItem link] forKey: key];
在您熟悉它時,self.urlToLinkDictionary是一個不變的字典。 您無法更改。
還有其他問題:
為什么不嘗試更簡化的方法。 將標簽與每個標簽相關聯。 標簽是一個整數值,您可以使用它在數組中定位網址。
因此,用於創建數組的代碼。
NSMutableArray* arrayURLs = [NSMutableArray arrayWithCapacity:2];
newsItem1ReadMoreLabel.tag = 0;
[arrayURLs insertObject:urlStringforLabel1 atIndex:newsItem1ReadMoreLabel.tag];
newsItem2ReadMoreLabel.tag = 1;
[arrayURLs insertObject:urlStringforLabel2 atIndex:newsItem2ReadMoreLabel.tag];
那么您可以訪問相應標簽的urlstring
NSString* url = [arrayURLs objectAtIndex:labelClicked.tag];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.