2011-07-14 45 views
0

我試圖打印出一個名爲Contact的對象(我寫的NSObject的擴展)。打印對象 - iPhone應用程序

當我的應用程序首次發佈,我有以下代碼:

NSMutableArray *arr = [UserData getGroupNames]; 
    NSLog(@"group names are %@",arr); 
    for(int i = 0; i < [arr count]; i++) { 
     NSString *name = [arr objectAtIndex:i]; 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     NSData *data = [defaults objectForKey:name]; 
     NSArray *a = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
     NSLog(@"name = %@",name); 
     NSLog(@"array count is %i",[a count]); 
     for(int i = 0; i < [a count]; i++) { 
      NSLog(@"on index %i",i); 
      Contact *c = [a objectAtIndex:i]; 
      NSLog(@"got contact"); 
      if(c == nil) 
       NSLog(@"it's nil!");  
      NSLog(@"contact first name = %@",[c getFirst]); 
      NSLog(@"got contact %@",c); 

所以,我讓我的陣列稱爲「a」和嘗試,並打印出來。那麼,這是行不通的。該計劃只是坐在那裏,並沒有做任何事情。它不會出錯或退出,它從字面上來說只是停止做任何事情。

因此,我打印計數,結果是1.所以顯然有數組中的東西。然後,我從數組中獲取第一個Contact,然後我的控制檯打印出「有聯繫」。

然後,我測試以查看該聯繫人是否爲零。好吧,事實並非如此。

然後,我嘗試打印聯繫人。我的程序停止運行。在控制檯中,我只看到「(gdb)」,沒有任何打印,並且沒有任何東西繼續運行。該計劃只是坐。

這是怎麼回事?我只是打印一個聯繫人(順便說一句,有一個描述方法設置,只打印出一個NSString)。

+0

你是什麼意思與「打印」?你想顯示在屏幕上,控制檯還是通過AirPrint? – EmilioPelaez

+0

這在我的代碼中很明顯。我試圖對該對象做一個NSLog「c」 – CodeGuy

+0

@ reising1當你拿出NSLog(@「contact first name =%@」,[c getFirst]);'?你不會提及它正在打印。 –

回答

0

我敢打賭c是一個壞對象。嘗試NSStringFromClass([c class]),但也嘗試加入調試器,看看它是如何發展的。

+0

我打印出來了,它是正確的:「聯繫」 – CodeGuy

+0

http://stackoverflow.com/questions/6698088/nsuserdefaults-nscoder-custom-class-iphone-app-question – CodeGuy

+0

ahh,hah,so'c' *是壞的,它引用了釋放的對象 – bshirley