I have an NSMutableArray called *favorites. It is an array of NSStrings and I want to write it to a .plist file.
When I call:
favPath = [[NSBundle mainBundle] pathForResource:@"Favorites" ofType:@"plist"];
[favorites writeToFile:favPath automatically:YES];
it crashes with the exception type EXC_BAD_ACCESS (SIGBUS) and with the exception code KERN_PROTECTION_FAILURE at 0x00000006
I have included the crashlog, the Favorites.plist, and a snippet of code where the method is being called. Help would be highly appreciated!
Crashlog:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000006
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x000034f8 objc_msgSend + 24
1 Foundation 0x00011ae6 _NSWriteBytesToFileWithExtendedAttributes + 56
2 Foundation 0x00011aa0 _NSWriteBytesToFile + 20
3 Foundation 0x00011a60 -[NSData(NSData) writeToFile:atomically:] + 60
4 Foundation 0x00049124 -[NSArray(NSArray) writeToFile:atomically:] + 148
5 CoderPlus 0x00005a7a -[HTMLViewController tableView:didSelectRowAtIndexPath:] (HTMLViewController.m:277)
6 UIKit 0x000c3f98 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 884
7 UIKit 0x000d4084 -[UITableView _userSelectRowAtIndexPath:] + 196
8 Foundation 0x00088334 __NSFireDelayedPerform + 360
9 CoreFoundation 0x00074256 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 10
10 CoreFoundation 0x00076966 __CFRunLoopDoTimer + 1038
11 CoreFoundation 0x000773ea __CFRunLoopRun + 1178
12 CoreFoundation 0x0001e0bc CFRunLoopRunSpecific + 220
13 CoreFoundation 0x0001dfca CFRunLoopRunInMode + 54
14 GraphicsServices 0x00003f88 GSEventRunModal + 188
15 UIKit 0x00007b40 -[UIApplication _run] + 564
16 UIKit 0x00005fb8 UIApplicationMain + 964
17 CoderPlus 0x0000837a main (main.m:14)
18 CoderPlus 0x00002c38 start + 32
Favorites.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
</array>
</plist>
Method that's causing the crash: (cellTitle is an NSString object)
if (favButtonActive == [NSNumber numberWithInt: 1]) {
// Write selection to Favorites.plist
if ([favorites containsObject:cellTitle]) {
[favorites removeObject:cellTitle];
} else {
[favorites addObject:cellTitle];
}
[favorites writeToFile:favPath atomically:YES];
[table reloadData];
}
You cannot write or modify a file in the application bundle on the iPhone. If you want to save data, create your file in the documents directory for your application. You can get the documents directory like this:
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
Then, just append your filename using NSString's stringByAppendingPathComponent: method.
Check out Apple's Low-Level File Management Programming Topics for more information on where to save data from your application.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With