2010-10-30 42 views
1

我的公司總監希望我爲即將推出的iPad應用程序顯示圖像廣告。我目前正試圖通過使用下面的代碼來顯示圖像:iPad - dataWithContentsOfURL在加載具有數據的URL時拋出NSRangeException

- (UIImage *)getAdImage:(NSString *)adName { 

NSString *adID = [self getPrivateConfigSettings:adName]; 
NSString *adUrl = 
    [NSString stringWithFormat:[self getPrivateConfigSettings:@"eplanningURL"], 
    [self getPrivateConfigSettings:@"eplanningSite"], adID]; 

NSData *theData = 
    [NSData dataWithContentsOfURL:[NSURL URLWithString:adUrl]]; 

return [UIImage imageWithData: theData]; 
} 

因爲它的立場,它拋出以下異常:

Terminating app due to uncaught exception 'NSRangeException', reason: 
'*** -[NSCFArray objectAtIndex:]: index (-1(or possibly larger)) 
beyond bounds (0)' 
在創建「海圖」行

但是,當我檢查我正在加載的URL(http://ads.us.e-planning.net/eb/3/9770/19e905cdc35ec591?o=i)時,它上面有數據。

PD:我知道代碼是漏水的!現在我只想找到我的錯誤的原因;)

+0

你的代碼實際上並不泄漏。你創建的所有對象都是自動釋放的(假設你的'-getPrivateConfigSettings:'方法遵循正常的內存管理規則)。 – 2010-10-30 00:19:17

+0

對不起,你確定錯誤是在NSData創建中,而不是在NSString * adUrl中?也許我錯了,但你的錯誤似乎與NSArray而不是NSData有關。 – pasine 2010-10-30 00:25:14

+0

我假設你檢查了'adUrl'是否有正確的字符串? – 2010-10-30 00:45:22

回答

0

找到了!它與URL無關。正如他在評論中指出的那樣,錯誤顯然與NSData無關,而與NSArray無關。

原來,我在一個單獨的線程(所以我可以更新用戶界面,而我下載信息),並在另一個線程中的問題。奇怪的是,當我加載'theData'對象時,它總是崩潰。到目前爲止,我不知道爲什麼其他線程會在特定時刻崩潰,但由於我處於緊張的時間表,並且我的問題得到解決,我只能讓這一個去。也許在稍後的時間,我會重新審視這個問題並提供一個適當的解釋。

2

嘗試手動設置你的網址,例如:

- (UIImage *)getAdImage:(NSString *)adName { 

NSString *adUrl = @"http://ads.us.e-planning.net/eb/3/9770/19e905cdc35ec591?o=i"; 

NSData *theData = 
    [NSData dataWithContentsOfURL:[NSURL URLWithString:adUrl]]; 

return [UIImage imageWithData: theData]; 
} 

如果它工作正常,你的問題是從檢索正確的URL getPrivateConfigSettings。

+0

非常感謝您的回覆。不幸的是,我嘗試了你的建議,但問題似乎並不在於從getPrivateConfigSettings中獲取URL,而是在'dataWithContentsOfURL'調用中。 – 2010-11-02 13:52:17

相關問題