2011-03-02 33 views
-1

也許這是個愚蠢的問題,但我有一個好奇的問題。當我重新進入視圖控制器時,每次嘗試使用核心數據刷新數據庫中的數據時,我的應用都會失敗。如果我進入視圖控制器並從互聯網刷新數據,它的工作原理。但是,當我啓動程序時,進入視圖控制器,然後彈出並重新輸入並嘗試刷新數據,它失敗並且視圖控制器中沒有記錄任何內容。我不知道爲什麼會發生。所以我試圖調試它,但問題消失了。在沒有調試模式的情況下再次嘗試後,它再次失敗。我不知道爲什麼。它可能是分配的問題,或者沒有發佈的東西?下面是我實現的-viewDidLoad如何解決在控制檯中未報告的失​​敗

- (void)viewDidLoad { 
    pool = [[NSAutoreleasePool alloc] init]; 

    if (managedObjectContext_ == nil) 
    { 
     managedObjectContext_ = [[(NavTestAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext] autorelease]; 
    } 

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(insertNewObject)]; 
    self.navigationItem.rightBarButtonItem = addButton; 
    [addButton release]; 

    prikazDatabaseArray = [[[NSMutableArray alloc] init]retain]; 

    NSDate *now = [NSDate date]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"dd.MM.yyyy"]; 
    datumOd = [[dateFormatter stringFromDate:now] retain]; 

    [dateFormatter release]; 

    VObrat = YES; 
}  

我也是在我的代碼使用

NSAutoreleasePool *pool; 
NSURLConnection *theConnection; 
NSMutableURLRequest *theRequest; 
NSData *xmlData; 
NSData *xmlFile; 
NSXMLParser *addressParser; 

。如果可以的話,至少可以幫助我找到問題所在,因爲沒有調試和控制檯,我覺得自己像個盲人。

非常感謝

回答

1

如果您正在創建自己的池,那麼您需要在相同的上下文或方法或循環中釋放池。

你應該使用[pool drain]。

如果您無法看到使用性能工具運行的崩潰日誌,它會給您錯誤的位置。

2

從線managedObjectContext_ = [[(NavTestAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext] autorelease];

你沒保留刪除自動釋放,所以你不應該(自動)釋放它。


編輯:我明白了,還有更多。

刪除prikazDatabaseArray = [[[NSMutableArray alloc] init]retain];中的保留。 Alloc已經保留了你的對象。不需要做兩次。

並擺脫autoreleasepool或在方法結束時將其排空。

您應該考慮再次閱讀Memory Management Programming Guide

+0

感謝您的回答,現在我知道我犯了什麼錯誤,但它仍然不清楚爲什麼我不能使用調試...或者爲什麼它在我調試它時運行良好,並且爲什麼它不會產生任何錯誤登錄控制檯?但再次感謝,我投票了你的答案,但我會等待答案,我的問題回答:如何解決失敗哪些未在控制檯中報告?謝謝 – Csabi 2011-03-03 06:28:34

相關問題