XCode: Exception. How to detect the cause?

2020-03-26 06:50发布

问题:

Xcode 4.6.1 with iOS 6.1. I'm using remote database with StackMob. Application first gives an error and after I click Play a few times, it runs fine and communicates with the server just fine. Not sure how to detect the problem and should it a concern?

I have the following exception Break Point setup:

The application runs and then stops at the following line:

   NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"email == %@", self.emailAddressField.text];
    [fetchRequest setPredicate:predicate];

    NSError *error = nil;
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];

so I changed the line above to:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext];
        [fetchRequest setEntity:entity];

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username == %@", self.usernameField.text];
        [fetchRequest setPredicate:predicate];

        [managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *fetchedObjects)
            {

Now when I run the program, I get the following error:

with

so I click the play button

and I get the following error:

and after I click play one more time, the Application continues to run as if nothing happened? Should I be concerned?

回答1:

You can check what the exception is with a simple lldb command, once the debugger stops on the exception. Select the exception like in your thread 6 here:

And then if you are running on the simulator type:

po $eax

If you are running on the device:

po $r0  (for 32-bit)
po $x0  (for 64-bit)

You should get a description of the exception.



回答2:

You already had this code:

NSError *error = nil;
NSArray *fetchedObjects = 
    [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];

So all you need is to keep going (without the breakpoint) and allow the error to log itself:

if (!fetchedObjects)
    NSLog(@"%@", error.localizedDescription);