2009-12-27 25 views
0

我一直花費太長的時間試圖找出錯誤,所以我希望有人能幫助我。需要iphone的幫助sdk:沒有正確保存.plist到文檔目錄

我的代碼:

- (IBAction)fedDog { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"dogsFedDays.plist"]; 
    NSMutableArray *dogsFedSave = [[NSMutableArray alloc] arrayWithCapacity: 48]; 
    for (int i = 0; i < 48; i++) { 
     NSDictionary *myDict = [[NSDictionary alloc] initWithObjectsAndKeys: 
           date[i], @"string", 
           fed[i], @"Yes", 
           nil]; 
     [dogsFedSave addObject:myDict]; 
     [myDict release]; 
    } 
    if (![dogsFedSave writeToFile:path atomically:YES]) 
     NSLog(@"not successful in completing this task"); 
} 

我已經連接動作按鈕,而是按下按鈕時,模擬器凍結,並沒有文件出現在Documents目錄。

+0

不要」在一個問題中詢問兩個不相關的問題 – hop 2009-12-27 09:06:01

回答

0

由於未處理的異常,模擬器可能會凍結。在應用程序運行時檢查調試控制檯。 您應用程序掛起的最可能原因是按下的按鈕可能調用fedDog:方法。試着改變你的方法簽名這一個:

- (IBAction)fedDog:(id)sender { 
    // your code 
} 
+0

整個目的是fedDog:被調用,不是嗎?無論如何,錯誤的簽名實際上並不會導致例外。 – hop 2009-12-27 09:09:17

+0

@hop:嗯,實際上,它會的。它會引發一個異常「發送給實例的無法識別的選擇器...」。只有顯式檢查給定實例是否響應了fedDog或fedDog:纔會防止拋出異常。雖然,在這種特殊情況下,您對arrayWithCapacity的看法是導致問題的一個更可能的原因。我還沒有注意到它。 – 2009-12-27 11:05:05

+0

對不起,我錯過了那裏的結腸,昨晚!當然你是對的! – hop 2009-12-27 14:52:04

0

對於初學者來說,你的動作方法應該只有一個參數而不是無。除此之外,你有沒有在調試器中運行它?

+0

IBActions可以有一個參數,或者沒有。據我所知,兩者都是有效的。 – 2009-12-27 09:18:33

0

您要發送arrayWithCapacity到NSMutableArray中的實例,但它實際上是宣佈爲

+ (id)arrayWithCapacity:(NSUInteger)numItems 

,因此一個類的方法。

因此,無論使用

NSMutableArray *dogsFedSave = [[NSMutableArray alloc] initWithCapacity:48]; 

NSMutableArray *dogsFedSave = [NSMutableArray arrayWithCapacity:48]; 

後者會更好,因爲它導致自動釋放的對象(和你忘了釋放dogsFedSave反正...)

+0

好的。我在頭文件中加入了「+(id)arrayWithCapacity:(NSUInteger)numItems 」。我注意到的一件事(我不認爲是新代碼造成的)是在類文件底部有4個警告。 1)類「feeddogviewcontroller」的不完整實現2)未找到+ arraywithcapacity的方法定義3)類feeddogviewcontroller(再次)的不完整實現4)未找到-fedDog的方法定義。如果您對我爲什麼收到這些警告有任何想法,請告訴我。謝謝! – Yogi 2009-12-27 17:17:23

+0

你爲什麼要這樣做? – hop 2009-12-27 18:03:47

+0

我覺得我有點困惑。 「+(id)arrayWithCapacity:(NSUInteger)numItems」應該去哪裏? – Yogi 2009-12-27 18:27:23