2009-12-29 90 views
1

我正在閱讀從tableview行推送的詳細視圖的字典條目。
但在詳細視圖中,當我拾取要顯示的數據(如HTML頁面),我發現了消息:iPhone SDK初始化NSString警告消息

不相容的Objective-C類型初始化「結構的NSDictionary *」。 '結構NSString *'

我做了什麼錯誤,它是如何修正的?

的代碼是在這裏:

- (void)viewDidAppear:(BOOL)animated { 
    NSLog(@"didappear"); 
    NSString *url = definition; // WARNING MESSAGE IS HERE 
    //self.glossaryWordDefinition.text = definition; 
    [glossaryWordDefinition loadRequest: 
     [NSURLRequest requestWithURL: 
     [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:url ofType:@"html"] 
     isDirectory:NO]]]; 
    [super viewDidAppear:animated]; 
} 
+0

需要看到更多的代碼 - 在哪裏定義聲明和初始化?我猜不知道它是一個NSDictionary而不是NSString。 – Tim 2009-12-29 08:06:36

回答

1

你的「定義」變量似乎被宣佈爲一個的NSDictionary *,而你正試圖將其分配到的NSString *。你大概意思是這樣的:

NSString *url = [definition valueForKey:@"some key"]; 
+0

非常感謝。我有THINK(?)這個問題,因爲我的初始詞彙表視圖/表是一個分段的(A到Z)字典,每個字母在項目0,1等索引的每個字詞中都有一個數組,所以我不能作爲行的detailviewcontroller中的引用行未聲明,我沒有密鑰。也許我應該把它聲明爲一個數組?請你幫忙。 – 2009-12-29 16:18:09

+0

你可以發佈你如何創建'定義'?或者說明它的結構。我不明白你在'定義'中有什麼。如果你這樣描述,我認爲我或其他人可以提供幫助。 – 2009-12-30 03:23:26

0

試試這個,據我從給定的數據瞭解,

NSString *url = [definition objectAtIndex:row]; 

行是選定行的indexpath值,在didSelectIndexPath方法聲明,

NSInteger row = [indexPath row]; 
+0

否則,需要多看看你的一些代碼,創建定義和didSelectRowAtIndexPath方法 – Nithin 2009-12-29 09:11:33

+0

感謝這個。我有一個位於glossaryviewcontroller中的頂級tableview。它由字母表中的每個字母表示,然後當didselectrow被激活時,我推送一個detailviewcontroller。問題是,在detailviewcontroller.m我不能引用行,因爲它是未聲明的,我不能使用鍵,因爲它是一個數組。我似乎在這個圈子裏轉圈了。任何幫助將不勝感激。整個事情應該像一個帶有分段A-Z的字典一樣工作,然後深入到定義。 – 2009-12-29 16:25:21

+0

然後你可能會創建帶有值和鍵的字典。在這種情況下,您可能需要使用Zoran Simic提供的方法。或聲明行爲 NSUInteger row = [indexPath row]; – Nithin 2009-12-30 02:53:59