EXC_BAD_ACCESSエラーの原因となっているaddToFavourites関数があります。 基本的に、お気に入りビューコントローラには、ユーザーが以前に追加したすべてのお気に入りのリストがあります。お気に入りの1つをクリックするとdetailViewControllerにプッシュされます。これはうまくいきます。ディテール・ビュー・コントローラーでは、お気に入りに追加ボタンがあります。このボタンは、addToFavouritesディクショナリーにキーがすでに存在することが検出された場合、お気に入りから削除されます。この問題は、ユーザーがこのdetailViewControllerをお気に入りページからアクセスし、すべてのdetailViewsを一覧表示するメインページからアクセスするときに発生します。彼らは私がタブバーを持っているので、これを行うことができます。addToFavourites関数を実行するとEXC_BAD_ACCESSが返される
私は、お気に入りのページからアクセスされたdetailViewにいます、お気に入りボタンには「お気に入りから削除」がありますが、これは正しいです。しかし、「お気に入りから削除」ボタンをクリックすると、ボタンが「お気に入りに追加」に変わり、辞書から削除されます。これまでのところすべて正常に動作しています。今度は、同じdetailViewに切り替えると、タブバーの別のタブからこの時間にアクセスすると、最初にお気に入りボタンが「お気に入りから削除」を読み込み、最初にこのボタンをクリックすると「追加」に変わりますお気に入り "をクリックすると、このEXC_BAD_ACCESSエラーが表示されます。任意の助け
- (IBAction)addToFavourites:(id)sender {
NSString *type = [[NSUserDefaults standardUserDefaults]objectForKey:@"type"];
if(type == @"v") {
NSString *area = [[NSUserDefaults standardUserDefaults]objectForKey:@"area"];
NSString *ID1 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID1"];
if([[addToFavouritesDictionary allKeys] containsObject:ID1]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary removeObjectForKey:ID1];
[favouritesButton setTitle:@"+ Favourites" forState:(UIControlState)UIControlStateNormal];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"New Dictionary: %@", addToFavouritesDictionary);
} else {
NSString *ID1 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID1"];
[addToFavouritesDictionary setObject:Name forKey:ID1];
[favouritesButton setTitle:@"- Favourites" forState:(UIControlState)UIControlStateNormal];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"Mutable Dictionary: %@", addToFavouritesDictionary);
//[addToFavouritesDictionary release];
}
} else {
//NSString *area = [[NSUserDefaults standardUserDefaults]objectForKey:@"area"];
NSString *ID2 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID2"];
if([[addToFavouritesDictionary allKeys] containsObject:ID2]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary removeObjectForKey:ID2];
[favouritesButton setTitle:@"+ Favourites" forState:(UIControlState)UIControlStateNormal];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"Dictionary: %@", addToFavouritesDictionary);
} else {
NSString *ID2 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID2"];
[addToFavouritesDictionary setObject:Name forKey:ID2];
[favouritesButton setTitle:@"- Favourites" forState:(UIControlState)UIControlStateNormal];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"Mutable Dictionary: %@", addToFavouritesDictionary);
}
}
}
ありがとう:ここ
はaddToFavouritesFunctionです!
[OK]を、この行が問題を引き起こしているようです:Name forKey:ID1]; –
これは動作しているようですが、私は初期化でNameオブジェクトを保持しています。唯一の問題は、お気に入りへの追加とお気に入りボタンへの削除が、両方のdetailViewControllerでまだ異なることです。これらを同じに保つにはどうしてですか? –