我已经坚持了大约两个星期。我讨厌张贴被问了很多的东西,但我真的把它们都看完了。
我使用 Ray Wenderlich 的教程在 iPhone 应用程序中保存数据。
http://www.raywenderlich.com/tutorials
这就是我在我的应用程序中进行的设置。我正在保存非常简单的对象。My Card 对象由名称、类型和图像组成。就这样。所以这个教程和我的很接近。这让这更令人沮丧。
问题是,我有一些 NSLog 语句用于加载。我让它显示它用来加载的文件夹以及它加载的对象。现在它正在显示这个。
Loading cards from /Users/zach/Library/Application Support/iPhone Simulator/7.0.3-64/Applications/E3DB01FD-A37E-4A69-840B-43830F2BDE2C/Library/Private Documents
2013-11-04 00:02:50.073 CardMinder[84170:a0b] ()
所以它似乎正在尝试加载它们,但没有任何东西可以加载。这是我保存数据的功能。
- (void)saveData {
if (_data == nil) return;
[self createDataPath];
NSString *dataPath = [_docPath stringByAppendingPathComponent:kDataFile];
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:_data forKey:kDataKey];
[archiver finishEncoding];
NSLog(@"%@",dataPath);
NSLog(@"%@",data);
[data writeToFile:dataPath atomically:YES];
}
这实际上正是该教程中发布的内容。我知道如果你觉得足够慷慨来帮助我,我将不得不发布更多代码,但我不想用无用的东西淹没帖子,所以让我知道,我会在这里发布。
我非常感谢任何可以提供帮助的人,我最近进入了绝望状态,需要帮助。
谢谢
更新
NSError *error;
[data writeToFile:dataPath options:NSDataWritingAtomic error:&error];
NSLog(@"error: %@", error.localizedFailureReason);
这些是 CardData 类的方法。我在这里做名称、类型和布尔值。
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:kNameKey];
[aCoder encodeObject:_cardType forKey:kTypeKey];
[aCoder encodeBool:_checkedOut forKey:kOutKey];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSString *name = [aDecoder decodeObjectForKey:kNameKey];
NSString *cardType = [aDecoder decodeObjectForKey:kTypeKey];
BOOL checkedOut = [aDecoder decodeBoolForKey:kOutKey];
return [self initWithName:name cardType:cardType _Bool:checkedOut];
}
更新 2
我只是在其中添加了一些 NSLog 语句,我发现当我在我的应用程序中按下“保存卡”按钮时,它似乎根本没有执行 saveData 函数。我在 saveData 函数中有大量的日志语句,当我单击 saveCard 按钮时,它不会显示任何这些日志。为什么会这样?
这是我的保存按钮代码。
- (IBAction)saveNewCard:(id)sender
{
NSString *cardName = self.nameField.text;
_cardDoc.data.name = cardName;
CardDoc *newCard = [[CardDoc alloc] initWithName:cardName cardType:cardTypeString _Bool:NO image:chosenIcon];
[_cardDoc saveData];
NSLog(@"Card save button pressed!");
CardViewController *cardViewController = (CardViewController *)[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2];
[cardViewController.cards addObject:newCard];
[self.navigationController popToRootViewControllerAnimated:YES];
}