我花了太长时间试图弄清楚出了什么问题,所以我希望有人可以帮助我。
我的代码:
- (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");
}
我已将操作连接到按钮,但是当按下按钮时,模拟器会冻结,并且文档目录中不会显示任何文件。
答案 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了......)