2009-12-27 72 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