How can this simple code fail assertion? - objective-c

PO(self);
PO(_locationManager.delegate);
PO([CLLocationHandler singleton]);
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
PO(self);
PO(_locationManager.delegate);
NSAssert(_locationManager.delegate==self,#"They are meant for each other");
So this code works in simulator and in most iPhone. There is one magical iPhone belonging to my biz partner that I can't debug program with.
If I run the installed program directly the code will yield this:
��
<Warning>: *** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
<Warning>: self: <CLLocationHandler: 0x1f8df560>
<Warning>: _locationManager.delegate: (null) <Warning>: [CLLocationHandler singleton]: <CLLocationHandler: 0x1f8df560>
<Warning>: self: <CLLocationHandler: 0x1f8df560>
<Warning>: _locationManager.delegate: <RwXSxTb_DelegateProxy: 0x1e594d00>
<Warning>: *** Assertion failure in -[CLLocationHandler additionalInitialization], /business/Dropbox/badgers/BadgerNew/CLLocationHandler.m:251
<Error>: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'They are meant for each other'
What the hell is delegateProxy?

May be the device in which you are debugging is JB(Jail Break).
So, you are unable to debug in that device.

There is no guarantee that reading from property will return exactly the same value.
Properties are syntactic sugar for calling getter and setter methods, and those methods can do anything.
It seems that in your case, -[CLLocationHandler setDelegate:] wraps the value in a proxy. Try comparing objects with isEqual: instead, many proxies will handle that correctly.

Related

Unexpected Crash on iPhone X on launching the application

Application is working fine on all devices including iPhone 8 except iPhone X.
Scenario is setting a viewcontrooller as the topviewcontroller on Push of navigation system and removing them on pop of navigation controller system. On launching on iPhoneX it crashes with the following error. This is the Push Method.
- (void)pushViewController:(MTRViewController *)viewControler {
self.viewControllers = [self.viewControllers arrayByAddingObject:vc];
viewControler.navigationController = self;
self.topViewController = viewControler;
}
This is the error log.
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MTRWindowViewController _isLayingOutTopViewController]: unrecognized selector sent to instance 0x7fa629c11d50'
*** First throw call stack:

Is there anyway to check if my app calls any method exclusive for iOS 8?

After testing my app in a iOS 7 device, I got a crash calling containsString from NSString, and then I realised that that methods has NS_AVAILABLE(10_10, 8_0);
Is there anyway to check automatically my program to see if there is any other method that is not available in iOS 7?
How is possible to compile and app with deployment target of 7.0 and not saying any warning or error in these cases?
-[__NSCFString containsString:]: unrecognized selector sent to instance 0x1702297c0
2015-10-23 12:03:37.655 WA[1434:60b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString containsString:]: unrecognized selector sent to instance 0x1702297c0'
* First throw call stack:
(0x183bd2f50 0x1900dc1fc 0x183bd7c04 0x183bd5930 0x183af55dc 0x1002a2c08 0x1000c71dc 0x1000caa88 0x1000c69bc 0x1000f3a4c 0x186c1055c 0x186c0ff08 0x186c099ec 0x186b9d8cc 0x186b9cad0 0x186c09044 0x1897bb504 0x1897bb030 0x183b92e90 0x183b92df0 0x183b91014 0x183ad1c20 0x186c081c8 0x186c02fdc 0x1000b6040 0x1906cfaa0)
libc++abi.dylib: terminating with uncaught exception of type NSException
You should use rangeOfString instead of containsString. Since rangeOfString available from iOS 2.0, you will not get crash on this.
Code snippets,
NSString *string = #"https://www.google.co.in/";
NSString *substring = #"http";
if ([oneContent rangeOfString:subString].location == NSNotFound) {
NSLog(#"string does not contain substring");
} else {
NSLog(#"string contains substring!");
}
Otherwise you can add category class for NSString and have a method like containsString: where you can implement the above code. It'll work dynamically.

Cannot share from iOS to GooglePlus

I'm working on social package in my app and I developed sharing using multiple social networks. While implementing Google+ SDK for iOS, I logged in and retrieved my account information, but when I start sharing, the application crashes
id<GPPNativeShareBuilder> shareBuilder = [[GPPShare sharedInstance] nativeShareDialog];
[shareBuilder setPrefillText:obj_featured.title];
UIImage *image = [self captureScreenShot];
[shareBuilder attachImage:image];
[shareBuilder open];
Simply, I commented and test every line, the problem is with the -open function.
The error appears for me when running over real device is:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]'
*** First throw call stack:
(0x2e783fd3 0x38ffcccf 0x2e6c2463 0x2e6c222b 0x1e7cd5 0x1c014f 0x1e9f31 0x1ea21d 0x1ea429 0x1c07f3 0x201179 0x2f16cc73 0x2e74f25b 0x2e74e72b 0x2e74cf1f 0x2e6b7f0f 0x2e6b7cf3 0x33610663 0x3100316d 0x106131 0x39509ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

program crashes when trying to present modal view controller

I want to load another xib, and use this simple code:
AddElementViewController *viewToLoad = [[AddElementViewController alloc] initWithNibName:#"AddElementViewController" bundle:nil];
viewToLoad.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:viewToLoad animated:YES];
for some reason it throws me out with this output:
2012-03-11 11:56:57.990 Weesh[14650:11603] -[MainViewController AddPressed:]: unrecognized selector sent to instance 0x7b55b40
2012-03-11 11:56:57.991 Weesh[14650:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainViewController AddPressed:]: unrecognized selector sent to instance 0x7b55b40'
*** First throw call stack:
(0x13da052 0x198ed0a 0x13dbced 0x1340f00 0x1340ce2 0x13dbec9 0x32a5c2 0x32a55a 0x3cfb76 0x3d003f 0x3cf2fe 0x34fa30 0x34fc56 0x336384 0x329aa9 0x22c7fa9 0x13ae1c5 0x1313022 0x131190a 0x1310db4 0x1310ccb 0x22c6879 0x22c693e 0x327a9b 0x1cad 0x1c15)
terminate called throwing an exception(lldb)
do you have any idea what can cause it?
Somewhere in your code (it seems to be in AddElementViewController implementation) you are sending message AddPressed: to object of class MainViewController.
The call stack and crash error says that there are no method AddPressed: in class MainViewController.
Try to find all places where you are calling AddPressed: (first of all check loadView, viewDidLoad, viewWillAppear, viewDidAppear, init of AddElementViewController class) and check the type of receiver.

Exception: unrecognized selector ... when trying to push a view controller on Navigation stack

I am trying to push a view controller on the navigation stack with following code in my buttonPressed method
-(IBAction) viewButtonPressed:(id)sender {
PersonDetailViewController *personDetailViewController = [[PersonDetailViewController alloc] initWithNibName:#"PersonDetailViewController" bundle:nil];
[self.navigationController pushViewController:personDetailViewController animated:YES];
[personDetailViewController release];
}
I ran the debugger and it throws the exception after followin line is stepped over from above code.
[self.navigationController pushViewController:personDetailViewController animated:YES];
This is pretty standard call ... it has worked many times before without any problems. Any idea what am I missing here?
I am stuck at this point and not able to drill down further.
Here are the error messages on the console after running the debugger
2009-10-30 18:15:11.127 Untitled[6089:20b] * -[NSCFString image]: unrecognized selector sent to instance 0x3050
2009-10-30 18:15:11.129 Untitled[6089:20b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString image]: unrecognized selector sent to instance 0x3050'
2009-10-30 18:15:11.130 Untitled[6089:20b] Stack: (
807902715,
2460638779 ...
The problem was in one of the init methods where I was setting the back button item incorrectly.
I would start by looking inside the view lifecycle methods - viewWillAppear, viewDidAppear etc. - in the PersonDetailViewController class for invocations of a method named image on some object instance.
You can also try stepping through these methods in an attempt to narrow down where this invocation is made.