0

我已经花了太长时间试图弄清楚出了什么问题,所以我希望她能帮助我。

我的代码:

- (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 目录中没有文件出现。

4

3 回答 3

0

对于初学者,您的操作方法应该采用单个参数而不是无参数。除此之外,您是否在调试器中运行过它?

于 2009-12-27T08:42:02.743 回答
0

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

- (IBAction)fedDog:(id)sender {
    // your code
}
于 2009-12-27T08:51:29.290 回答
0

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

+ (id)arrayWithCapacity:(NSUInteger)numItems

因此是一个类方法。

所以要么使用

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

或者

NSMutableArray *dogsFedSave = [NSMutableArray arrayWithCapacity:48];

后者会更好,因为它会产生一个自动释放的对象(无论如何你都忘了释放 dogFedSave……)

于 2009-12-27T09:05:24.287 回答