需要帮助iphone sdk:没有正确地将.plist保存到文档目录

时间:2009-12-27 08:25:50

标签: iphone sdk nsmutablearray nsarray nsdictionary

我花了太长时间试图弄清楚出了什么问题,所以我希望有人可以帮助我。

我的代码:

- (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"); 
}

我已将操作连接到按钮,但是当按下按钮时,模拟器会冻结,并且文档目录中不会显示任何文件。

3 个答案:

答案 0 :(得分:0)

对于初学者来说,你的动作方法应该只有一个参数而不是一个参数。除此之外,你有没有在调试器中运行它?

答案 1 :(得分:0)

由于未处理的异常,模拟器可能会冻结。在应用程序运行时检查调试控制台。 应用程序挂起的最可能原因是按下的按钮可能正在调用fedDog:方法。尝试将方法签名更改为此签名:

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

答案 2 :(得分:0)

您正在尝试将arrayWithCapacity发送到NSMutableArray的实例,但它实际上已声明为

+ (id)arrayWithCapacity:(NSUInteger)numItems

因此是一种类方法。

所以要么使用

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

NSMutableArray *dogsFedSave = [NSMutableArray arrayWithCapacity:48];

后者会更好,因为它会产生一个自动释放的对象(而且你忘了发布dogFedSave了......)