I am trying to save data when the home button is pressed.
Here is my relevant code.
- (NSString *) saveFilePath
{
NSArray *path =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [[path objectAtIndex:0] stringByAppendingPathComponent:@"savefile.plist"];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSArray *values = [[NSArray alloc] initWithObjects:
[NSNumber numberWithInt:askedQuestions], //for questionLabel
[NSNumber numberWithInt:timeMin], //timeMin
[NSNumber numberWithInt:timeSec], //timeSec
[NSNumber numberWithInt:skipCount], //skipped question
[NSNumber numberWithInt:correctAnswers], //corectAnswers
nil];
[values writeToFile:[self saveFilePath] atomically:YES];
}
saveFilePath method is providing the file path.
And in viewDidLoad
NSString *myPath = [self saveFilePath];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];
if (fileExists)
{
NSArray *values = [[NSArray alloc] initWithContentsOfFile:myPath];
_readerLabel.text = [[values objectAtIndex:0] stringValue];
askedQuestions=[[values objectAtIndex:0] intValue];
timeMin=[[values objectAtIndex:1]intValue];
timeSec=[[values objectAtIndex:2]intValue];
skipCount=[[values objectAtIndex:3]intValue];
correctAnswers=[[values objectAtIndex:4]intValue];
}
UIApplication *myApp = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidEnterBackground:)
name:UIApplicationDidEnterBackgroundNotification
object:myApp];
and i am getting this:
Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'
*** First throw call stack:
(0x16a1012 0x13aee7e 0x16a0deb 0x16957e0 0x6891 0x312d 0x305817 0x305882 0x254a25 0x254dbf 0x254f55 0x25df67 0x221fcc 0x222fab 0x234315 0x23524b 0x226cf8 0x2703df9 0x2703ad0 0x1616bf5 0x1616962 0x1647bb6 0x1646f44 0x1646e1b 0x2227da 0x22465c 0x26cd 0x25f5)
libc++abi.dylib: terminate called throwing an exception
Where is the problem in the code. Please help!
You’re not checking to see if anything has worked!
What happens if
either fails (the file might not exist) or if it returns an array with 0 items in?
You need to add something like :
You should also set a breakpoint on
applicationDidEnterBackground:and step though to make sure that your save method is working as you expect.Also, I suspect one of these two lines is wrong :
they’re both asking for the item at index 0