私はこれに約2週間立ち往生しています。よく聞かれることを投稿するのは嫌いですが、実際にはすべて経験しました。
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 ボタンをクリックしても、それらのログは表示されません。なぜそれが起こっているのでしょうか?
これは私の saveButton コードです。
- (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];
}