Iphone Application terminate due to uncaught exception 'NSInvalidArgumentException' - iphone

I have an application in which i use this code for save data in local prefences.
-(IBAction)radio_button:(id)sender{
switch ( ((UIButton*)sender).tag ){
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
case 0:
{
[button0 setBackgroundImage:[UIImage imageNamed:#"checkBox_Checked.png"] forState:UIControlStateNormal];
button0.selected=TRUE;
[defaults setInteger: 0 forKey:#"tag_button0"];
[defaults synchronize];
NSLog(#"Data saved");
break;
}
case 1:
{
[button1 setBackgroundImage:[UIImage imageNamed:#"checkBox_Checked.png"] forState:UIControlStateNormal];
button1.selected=TRUE;
[defaults setInteger:1 forKey:#"tag_button1"];
[defaults synchronize];
NSLog(#"Data saved");
break;
}
case 2:
{
[button2 setBackgroundImage:[UIImage imageNamed:#"checkBox_Checked.png"] forState:UIControlStateNormal];
button2.selected=TRUE;
[defaults setInteger:2 forKey:#"tag_button2"];
[defaults synchronize];
NSLog(#"Data saved");
break;
}
}
}
When i run the application then i get error message which i shown below.
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIControlTargetAction setInteger:forKey:]: unrecognized selector sent to instance 0x181dd0'
* Call stack at first throw:
(
0 CoreFoundation 0x35f08c7b exceptionPreprocess + 114
1 libobjc.A.dylib 0x30186ee8 objc_exception_throw + 40
2 CoreFoundation 0x35f0a3e3 -[NSObject(NSObject) doesNotRecognizeSelector:] + 98
3 CoreFoundation 0x35eaf467 __forwarding + 506
4 CoreFoundation 0x35eaf220 _CF_forwarding_prep_0 + 48
5 Congnitive_Appointment_Timer 0x0000d03d -[Set_Routine_Screen radio_button:] + 252
6 CoreFoundation 0x35eada43 -[NSObject(NSObject) performSelector:withObject:withObject:] + 26
7 UIKit 0x3384af20 -[UIApplication sendAction:to:from:forEvent:] + 136
8 UIKit 0x3384ae88 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 40
9 UIKit 0x3384ae50 -[UIControl sendAction:to:forEvent:] + 52
10 UIKit 0x3384aaa0 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 536
11 UIKit 0x3384b5cc -[UIControl touchesEnded:withEvent:] + 460
12 UIKit 0x3383ceb0 -[UIWindow _sendTouchesForEvent:] + 588
13 UIKit 0x3383c4e4 -[UIWindow sendEvent:] + 396
14 UIKit 0x3381fc9c -[UIApplication sendEvent:] + 452
15 UIKit 0x3381f3b4 _UIApplicationHandleEvent + 6824
16 GraphicsServices 0x35262c88 PurpleEventCallback + 1048
17 CoreFoundation 0x35e9a5cb CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 28
18 CoreFoundation 0x35e9a589 __CFRunLoopDoSource1 + 164
19 CoreFoundation 0x35e8c835 __CFRunLoopRun + 580
20 CoreFoundation 0x35e8c50b CFRunLoopRunSpecific + 226
21 CoreFoundation 0x35e8c419 CFRunLoopRunInMode + 60
22 GraphicsServices 0x35261d24 GSEventRunModal + 196
23 UIKit 0x3386557c -[UIApplication _run] + 588
24 UIKit 0x33862558 UIApplicationMain + 972
25 Congnitive_Appointment_Timer 0x00002c19 main + 72
26 Congnitive_Appointment_Timer 0x00002b98 start + 52
)
terminate called after throwing an instance of 'NSException'
What is error in above code?
Thanks in advances...

You are declaring your defaults variable inside of the switch. Move it to outside the switch
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
switch ( ((UIButton*)sender).tag ){

use This One
-(IBAction)radio_button:(id)sender{
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
switch ( ((UIButton*)sender).tag ){
case 0:
{
btn1.selected=TRUE;
[defaults setInteger:0 forKey:#"tag_button0"];
[defaults synchronize];
NSLog(#"Data saved");
break;
}
case 1:
{
btn2.selected=TRUE;
[defaults setInteger:1 forKey:#"tag_button1"];
[defaults synchronize];
NSLog(#"Data saved");
break;
}
case 2:
{
btn3.selected=TRUE;
[defaults setInteger:2 forKey:#"tag_button2"];
[defaults synchronize];
NSLog(#"Data saved");
break;
}
}
}

Related

objective c - getting null values

I have been stuck on this for some time now but whats happening is that when the request comes back from mysql there is a null value but how do i check that a null value has hit my condition so that i dont store this value in the array. The code is below
The error i keep getting is -[NSNull isEqualToString:]: unrecognized and im trying to bind the array inside a tableview
- (void)viewDidLoad {
JobAddSiteAppDelegate *ja = (JobAddSiteAppDelegate *)[[UIApplication sharedApplication] delegate];
tempArray = [[NSMutableArray alloc] init];
NSString *strURL = [NSString stringWithFormat:#"http://www.bestitjobs.co.uk/appresults3.php", ""];
NSData *nsData = [NSData dataWithContentsOfURL:[NSURL URLWithString: strURL]];
//NSLog(#"JSON: %#", nsData);
//NSString *strResult = [[[NSString alloc] initWithData:nsData encoding:NSUTF8StringEncoding] autorelease];
//NSLog(#"Result: %#",strResult);
//NSError *e = nil;
JSONDecoder* decoder = [[JSONDecoder alloc] init];
NSDictionary* listDictionary = [nsData objectFromJSONData];
NSArray* people =[listDictionary objectForKey:#"jobs"];
for (NSDictionary *person in people) {
NSLog(#"people %#",people);
if([person objectForKey:#"position"] != [NSNull class])
{
NSString *position = [person objectForKey:#"position"];
NSLog(#"position %#",position);
[tempArray addObject: position];
}
}
self.listData = tempArray;
[tempArray release];
[listData release];
[super viewDidLoad];
}
Error
2012-12-06 12:22:11.314 JobAddSite[7718:207] position Senior Network and Systems Consultant
2012-12-06 12:22:11.316 JobAddSite[7718:207] position SAP Business One / SAP B1 Consultant London
2012-12-06 12:22:11.317 JobAddSite[7718:207] position Business Development Manager - Market Leading IT Company
2012-12-06 12:22:11.318 JobAddSite[7718:207] -[NSNull isEqualToString:]: unrecognized selector sent to instance 0xe565e8
2012-12-06 12:22:11.321 JobAddSite[7718:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0xe565e8'
* Call stack at first throw:
(
0 CoreFoundation 0x00de95a9 exceptionPreprocess + 185
1 libobjc.A.dylib 0x00f3d313 objc_exception_throw + 44
2 CoreFoundation 0x00deb0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00d5a966 __forwarding + 966
4 CoreFoundation 0x00d5a522 _CF_forwarding_prep_0 + 50
5 JobAddSite 0x000024cd -[ResultViewController viewDidLoad] + 604
6 UIKit 0x00389089 -[UIViewController view] + 179
7 UIKit 0x0038aa3d -[UIViewController viewControllerForRotation] + 63
8 UIKit 0x00386988 -[UIViewController _visibleView] + 90
9 UIKit 0x0062893c -[UIClientRotationContext initWithClient:toOrientation:duration:andWindow:] + 354
10 UIKit 0x0030081e -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 954
11 UIKit 0x00588619 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:] + 1381
12 UIKit 0x0038d65d -[UIViewController presentModalViewController:withTransition:] + 3478
13 JobAddSite 0x0000213f -[JobAddSiteViewController search] + 270
14 UIKit 0x002d94fd -[UIApplication sendAction:to:from:forEvent:] + 119
15 UIKit 0x00369799 -[UIControl sendAction:to:forEvent:] + 67
16 UIKit 0x0036bc2b -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
17 UIKit 0x0036a7d8 -[UIControl touchesEnded:withEvent:] + 458
18 UIKit 0x002fdded -[UIWindow _sendTouchesForEvent:] + 567
19 UIKit 0x002dec37 -[UIApplication sendEvent:] + 447
20 UIKit 0x002e3f2e _UIApplicationHandleEvent + 7576
21 GraphicsServices 0x01741992 PurpleEventCallback + 1550
22 CoreFoundation 0x00dca944 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52
23 CoreFoundation 0x00d2acf7 __CFRunLoopDoSource1 + 215
24 CoreFoundation 0x00d27f83 __CFRunLoopRun + 979
25 CoreFoundation 0x00d27840 CFRunLoopRunSpecific + 208
26 CoreFoundation 0x00d27761 CFRunLoopRunInMode + 97
27 GraphicsServices 0x017401c4 GSEventRunModal + 217
28 GraphicsServices 0x01740289 GSEventRun + 115
29 UIKit 0x002e7c93 UIApplicationMain + 1160
30 JobAddSite 0x00001dec main + 102
31 JobAddSite 0x00001d7d start + 53
)
terminate called after throwing an instance of 'NSException'
Just try this one:
if ([person objectForKey:#"position"]) {..}
This one is the same but maybe more readable:
if ([person objectForKey:#"position"] != nil) {..}
Hi Use the following code.
It is working Well.
Download Supporting Files
NSMutableArray *empArray = [[NSMutableArray alloc] init];
SBJSON *parser = [[SBJSON alloc] init];
NSURLRequest *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"http://www.bestitjobs.co.uk/appresults3.php"]]];
NSLog(#"GGGG:%#",request1);
NSData *response1 = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response1 encoding:NSUTF8StringEncoding];
NSDictionary *statuses = [parser objectWithString:json_string error:nil];
NSLog(#"List Dictionary:%#",statuses);
NSArray* people =[statuses objectForKey:#"jobs"];
for(NSDictionary *test in people)
{
[empArray addObject:[test valueForKey:#"position"]];
}
NSLog(#"EMP ARRAY CATEGORY:%#",empArray);
Note: Before you Use SBJSon supporting files and import JSON.h
And check your console.
Check condition like this and add value to Array
for (NSDictionary *person in people) {
NSLog(#"people %#",people);
NSString *position = [person objectForKey:#"position"];
if(position) {
[tempArray addObject: position];
}
}

Error when presenting dates I stored in sqlite3 db in iphone development

I get this error when trying to to represent the stored dates
my question is what is this error ?
error:
2011-11-13 10:06:36.001 Holiday[217:207] -[NSNull cc_componentsForMonthDayAndYear]: unrecognized selector sent to instance 0x259ed68
2011-11-13 10:06:36.039 Holiday[217:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull cc_componentsForMonthDayAndYear]: unrecognized selector sent to instance 0x259ed68'
*** Call stack at first throw:
(
0 CoreFoundation 0x02534b99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x0268440e objc_exception_throw + 47
2 CoreFoundation 0x025366ab -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x024a62b6 ___forwarding___ + 966
4 CoreFoundation 0x024a5e72 _CF_forwarding_prep_0 + 50
5 Holiday 0x00008c7e +[KalDate dateFromNSDate:] + 44
6 Holiday 0x0000fc36 -[KalViewController loadedDataSource:] + 265
7 Holiday 0x000081d4 -[HolidaySqliteDataSource loadHolidaysFrom:to:delegate:] + 873
8 Holiday 0x00008560 -[HolidaySqliteDataSource presentingDatesFrom:to:delegate:] + 97
9 Holiday 0x0000f848 -[KalViewController reloadData] + 162
10 Holiday 0x0000fe16 -[KalViewController showAndSelectDate:] + 276
11 Holiday 0x000065ab -[HolidayAppDelegate showAndSelectToday] + 90
12 UIKit 0x002e27f8 -[UIApplication sendAction:to:from:forEvent:] + 119
13 UIKit 0x004ee68b -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156
14 UIKit 0x002e27f8 -[UIApplication sendAction:to:from:forEvent:] + 119
15 UIKit 0x0036dde0 -[UIControl sendAction:to:forEvent:] + 67
16 UIKit 0x00370262 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
17 UIKit 0x0036ee0f -[UIControl touchesEnded:withEvent:] + 458
18 UIKit 0x003063d0 -[UIWindow _sendTouchesForEvent:] + 567
19 UIKit 0x002e7cb4 -[UIApplication sendEvent:] + 447
20 UIKit 0x002ec9bf _UIApplicationHandleEvent + 7672
21 GraphicsServices 0x02d90822 PurpleEventCallback + 1550
22 CoreFoundation 0x02515ff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
23 CoreFoundation 0x02476807 __CFRunLoopDoSource1 + 215
24 CoreFoundation 0x02473a93 __CFRunLoopRun + 979
25 CoreFoundation 0x02473350 CFRunLoopRunSpecific + 208
26 CoreFoundation 0x02473271 CFRunLoopRunInMode + 97
27 GraphicsServices 0x02d8f00c GSEventRunModal + 217
28 GraphicsServices 0x02d8f0d1 GSEventRun + 115
29 UIKit 0x002f0af2 UIApplicationMain + 1160
30 Holiday 0x00001fd4 main + 102
31 Holiday 0x00001f65 start + 53
32 ??? 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
presenting function code :
- (void)loadHolidaysFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate
{
NSLog(#"Fetching holidays from the database between %# and %#...", fromDate, toDate);
sqlite3 *db;
NSDateFormatter *fmt = [[[NSDateFormatter alloc] init] autorelease];
if(sqlite3_open([[self databasePath] UTF8String], &db) == SQLITE_OK) {
const char *sql = "select name, country, date_of_event from holidays where date_of_event between ? and ?";
sqlite3_stmt *stmt;
if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
[fmt setDateFormat:#"yyyy-MM-dd hh:mm:ss"];
sqlite3_bind_text(stmt, 1, [[fmt stringFromDate:fromDate] UTF8String], -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, [[fmt stringFromDate:toDate] UTF8String], -1, SQLITE_STATIC);
[fmt setDateFormat:#"yyyy-MM-dd"];
while(sqlite3_step(stmt) == SQLITE_ROW) {
NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 0)];
NSString *country = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];
NSString *dateAsText = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 2)];
[holidays addObject:[Holiday holidayNamed:name country:country date:[fmt dateFromString:dateAsText]]];
}
}
sqlite3_finalize(stmt);
}
sqlite3_close(db);
[delegate loadedDataSource:self];
}
insert function, which insert dates
-(NSNumber*) insertDate: (NSDate*) d
{
NSLog(#"inserting date into database");
sqlite3 *db;
NSNumber *re = [NSNumber numberWithInt:-1];
NSDateFormatter *fmt = [[[NSDateFormatter alloc]init]autorelease];
if(sqlite3_open([[self databasePath]UTF8String],&db)==SQLITE_OK){
const char *sql = "insert into holidays(name, country, date_of_event) values(?,?,?)";
sqlite3_stmt *addStmt;
if(sqlite3_prepare_v2(db,sql,-1,&addStmt,NULL)==SQLITE_OK){
[fmt setDateFormat:#"yyyy-MM-dd hh:mm:ss"];
NSString *country = #"country test";
NSString *name =#"name test";
sqlite3_bind_text(addStmt,1,[name UTF8String],-1,SQLITE_STATIC);
sqlite3_bind_text(addStmt,2,[country UTF8String],-1,SQLITE_STATIC);
sqlite3_bind_text(addStmt,3,[[fmt stringFromDate:d]UTF8String],-1,SQLITE_STATIC);
}
if(SQLITE_DONE != sqlite3_step(addStmt)){
NSAssert1(0,#"Error in inserting into database %s",sqlite3_errmsg(db));
}else {
re = [NSNumber numberWithInt: sqlite3_last_insert_rowid(db)];
sqlite3_finalize(addStmt);
sqlite3_close(db);
}
}
return re;
}
I received the same error message. My solution required that I "chop" the time off of my date string. Another words truncate "2013-06-03 13:42:34 +0000" to "2013-06-03". The Kal function called by holiday wanted only the date.
The problem is, Kal takes NSDate as input in its internal methods. So make sure your object has NSDate and not NSString!

Crash With WebView in iPhone

I get following crash when I open a URL consecutively for 3 to 4 times in my app inside a webView.
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: EXC_ARM_DA_ALIGN at 0x0062006f
Crashed Thread: 0
Thread 0 Crashed:
0 libSystem.B.dylib 0x0000576c OSAtomicCompareAndSwap32 + 0
1 libobjc.A.dylib 0x000066ce changeInfo(class_t*, unsigned int, unsigned int) + 22
2 libobjc.A.dylib 0x00008412 realizeClass(class_t*) + 38
3 libobjc.A.dylib 0x0000862c prepareForMethodLookup + 44
4 libobjc.A.dylib 0x0000538a lookUpMethod + 34
5 libobjc.A.dylib 0x00002b82 _class_lookupMethodAndLoadCache + 6
6 libobjc.A.dylib 0x000028b8 objc_msgSend_uncached + 20
7 UIKit 0x001d68c2 -[UIWebView webView:didFinishLoadForFrame:] + 214
8 UIKit 0x001d5e0c -[UIWebViewWebViewDelegate webView:didFinishLoadForFrame:] + 16
9 CoreFoundation 0x0009f06c __invoking___ + 60
10 CoreFoundation 0x00032706 -[NSInvocation invoke] + 102
11 WebCore 0x00044d42 SendMessage(NSInvocation*) + 10
12 WebCore 0x0005846e HandleDelegateSource(void*) + 62
13 CoreFoundation 0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 6
14 CoreFoundation 0x00073768 __CFRunLoopDoSources0 + 376
15 CoreFoundation 0x00074504 __CFRunLoopRun + 224
16 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
17 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
18 GraphicsServices 0x000036e8 GSEventRunModal + 108
19 GraphicsServices 0x00003794 GSEventRun + 56
20 UIKit 0x000062a0 -[UIApplication _run] + 396
21 UIKit 0x00004e10 UIApplicationMain + 664
What could be wrong?
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(#"Button Clicked!");
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
orkutURLString = #"";
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:TRUE];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSURL *currentURL = orkutWebView.request.mainDocumentURL;
NSLog(#"Relative URL: %#",[currentURL relativePath]);
NSArray *urllistItems = [[currentURL relativePath] componentsSeparatedByString:#"/"];
if([urllistItems count]>1)
{
orkutURLString = [urllistItems objectAtIndex:1];
orkutURLString = [orkutURLString lowercaseString];
if([orkutURLString isEqualToString:#"share"])
{
orkutWebView = nil;
[orkutWebView removeFromSuperview];
[orkutView removeFromSuperview];
NSString *message1 = NSLocalizedStringFromTableInBundle( #"Your status update was sent", #"Localizable", [NewfoxRadioAppDelegate GetLocalizebundle], #"");
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:#"Newfox Radio" message:message1 delegate:self cancelButtonTitle:#"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
}
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:FALSE];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:FALSE];
}
Got the solution. Got an NSZombie wherein I was releasing the object and then trying to access it. Got the desired result after I made use of Instruments to find out the NSZombie.

Leak with Mutable Array even when released

Instruments point to this line saying there is a leak here
- (void) loadFavoriteData {
TradePortMobileAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegate managedObjectContext];
NSManagedObjectModel *objectModel = [[context persistentStoreCoordinator] managedObjectModel];
Session *session = delegate.session;
NSDictionary *param = [NSDictionary dictionaryWithObjectsAndKeys: [session objectForKey:#"CTY_CODE"], pCOUNTRY, nil];
NSFetchRequest *fetchRequest = [objectModel fetchRequestFromTemplateWithName:#"fetchAllFavorites" substitutionVariables:param];
[fetchRequest setSortDescriptors: self.dataSorter];
NSError *error;
//THIS IS THE LINE INSTRUMENT SAYS THERE IS A LEAK!!!!!
NSMutableArray *favorites = [[context executeFetchRequest:fetchRequest error:&error] mutableCopy];
if ([favorites count] > 0) {
[self.favoriteList removeAllObjects];
for (NSInteger i=0; i < [favorites count]; i++) {
FavoriteData *favorite = [favorites objectAtIndex: i];
if (i < vMaxRecordsInCoreData) {
[self.favoriteList addObject:[FavoriteInfo favoriteInfoWithClientId:favorite.clientId withName:favorite.name
withAddress:favorite.address
withPhone:favorite.phone
withEmail:favorite.email
withCountry:favorite.country
withLtpId:favorite.ltpId
withUpdateTimestamp:favorite.updateTimestamp
withNoOfDetails:favorite.noOfDetails]];
}
else {
[context deleteObject:favorite];
}
}
if (![context save:&error]) {
NSLog(#"deleting excess favorites failed.");
}
self.navigationItem.leftBarButtonItem.enabled = YES;
}
else {
[self.favoriteList removeAllObjects];
self.navigationItem.leftBarButtonItem.enabled = NO;
}
[favorites removeAllObjects];
[favorites release];
}
This is the stack
0 CoreFoundation _CFRuntimeCreateInstance
1 CoreFoundation __CFStringCreateImmutableFunnel3
2 CoreFoundation CFStringCreateWithCString
3 CoreData -[NSSQLCore _prepareResultsFromResultSet:usingFetchPlan:withMatchingRows:]
4 CoreData -[NSSQLCore _newRowsForFetchPlan:selectedBy:withArgument:]
5 CoreData -[NSSQLCore newRowsForFetchPlan:]
6 CoreData -[NSSQLCore objectsForFetchRequest:inContext:]
7 CoreData -[NSSQLCore executeRequest:withContext:error:]
8 CoreData -[NSPersistentStoreCoordinator executeRequest:withContext:error:]
9 CoreData -[NSManagedObjectContext executeFetchRequest:error:]
MY CODE HERE--->10 TradePortMobile -[FavoritesTableViewController loadFavoriteData] /Users/aldrich/Projects/iPhone/Classes/FavoritesTableViewController.m:281
11 TradePortMobile -[FavoritesTableViewController viewWillAppear:] /Users/aldrich/Projects/iPhone/Classes/FavoritesTableViewController.m:54
12 UIKit -[UINavigationController viewWillAppear:]
13 UIKit -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:]
14 UIKit -[UITabBarController transitionFromViewController:toViewController:]
15 UIKit -[UITabBarController _setSelectedViewController:]
16 UIKit -[UITabBarController _tabBarItemClicked:]
17 UIKit -[UIApplication sendAction:to:from:forEvent:]
18 UIKit -[UITabBar _sendAction:withEvent:]
19 UIKit -[UIApplication sendAction:to:from:forEvent:]
20 UIKit -[UIControl sendAction:to:forEvent:]
21 UIKit -[UIControl(Internal) _sendActionsForEvents:withEvent:]
22 UIKit -[UIControl sendActionsForControlEvents:]
23 UIKit -[UIApplication sendAction:to:from:forEvent:]
24 UIKit -[UIControl sendAction:to:forEvent:]
25 UIKit -[UIControl(Internal) _sendActionsForEvents:withEvent:]
26 UIKit -[UIControl touchesEnded:withEvent:]
27 UIKit -[UIWindow _sendTouchesForEvent:]
28 UIKit -[UIApplication sendEvent:]
29 UIKit _UIApplicationHandleEvent
30 GraphicsServices PurpleEventCallback
31 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
32 CoreFoundation __CFRunLoopDoSource1
33 CoreFoundation __CFRunLoopRun
34 CoreFoundation CFRunLoopRunSpecific
35 CoreFoundation CFRunLoopRunInMode
36 GraphicsServices GSEventRunModal
37 GraphicsServices GSEventRun
38 UIKit UIApplicationMain
39 TradePortMobile main /Users/aldrich/Projects/iPhone/main.m:14
40 TradePortMobile start
May somebody give me a push to the right direction? or an answer to this leak i can not solve :)
The leak tool can only point to where the memory has been allocated, the leak is probably happening as you are passing some of the properties of each object from the array in the following code:
[self.favoriteList addObject:[FavoriteInfo favoriteInfoWithClientId:favorite.clientId withName:favorite.name
withAddress:favorite.address
withPhone:favorite.phone
withEmail:favorite.email
withCountry:favorite.country
withLtpId:favorite.ltpId
withUpdateTimestamp:favorite.updateTimestamp
withNoOfDetails:favorite.noOfDetails]];
you need to check what happens with the parameters of favoriteInfoWithClientId:favorite - if you retain any of these then you will have a leak...
hope this helps

AddressBook Crash, only with some contacts

My app crashes, it is a problem that arises from the AddressBook API, it only happens with some contacts.
Here is the log:
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000102, 0x316ebd38
Crashed Thread: 0
Thread 0 Crashed:
0 CoreFoundation 0x00001cfe CFRetain + 90
1 AddressBook 0x00004b2c ABCMultiValueCopyValueAtIndex + 28
2 AddressBook 0x0001066a ABMultiValueCopyValueAtIndex + 2
3 Call Monitor 0x00003824 -[CallAppDelegate peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:] (AppDelegate.m:408)
4 AddressBookUI 0x00032cfc -[ABPeoplePickerNavigationController personViewController:shouldPerformDefaultActionForPerson:property:identifier:withMemberCell:] + 152
5 AddressBookUI 0x0003b8ce -[ABPersonViewControllerHelper personTableViewDataSource:selectedPropertyAtIndex:inPropertyGroup:withMemberCell:forEditing:] + 222
6 AddressBookUI 0x0004a17c -[ABPersonTableViewDataSource valueAtIndex:selectedForPropertyGroup:withMemberCell:forEditing:] + 40
7 AddressBookUI 0x00048c00 -[ABPersonTableViewDataSource tableView:didSelectRowAtIndexPath:] + 316
8 UIKit 0x00091f40 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 656
9 UIKit 0x0009db40 -[UITableView _userSelectRowAtIndexPath:] + 124
10 Foundation 0x00086c86 __NSFireDelayedPerform + 362
11 CoreFoundation 0x00071a54 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
12 CoreFoundation 0x00073ede __CFRunLoopDoTimer + 854
13 CoreFoundation 0x0007485e __CFRunLoopRun + 1082
14 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
15 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
16 GraphicsServices 0x000036e8 GSEventRunModal + 108
17 GraphicsServices 0x00003794 GSEventRun + 56
18 UIKit 0x000062a0 -[UIApplication _run] + 396
19 UIKit 0x00004e10 UIApplicationMain + 664
20 Call Monitor 0x000028e8 main (main.m:14)
21 Call Monitor 0x000028b8 start + 32
This is driving me crazy, as it only happens with an isolated number of contacts.
Any help would be greatly appreciated.
Here is the code that was requested, thank you very very much for your help:
(It is an extract from the method where I think the error happens)
The weird thing is that it only happens with certain contacts, and deleting the contact, then creating a new one solves the problem...
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
NSString* firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString* lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
NSNumber* record = [NSNumber numberWithInt:ABRecordGetRecordID(person)];
if(lastName!=nil){
name=[NSString stringWithFormat:#"%# %#",firstName,lastName];
}
else {
name=firstName;
}
ABMultiValueRef phone = ABRecordCopyValue(person, property);
NSString *value =(NSString *)ABMultiValueCopyValueAtIndex(phone, identifier);
NSString *label =(NSString *)ABMultiValueCopyLabelAtIndex(phone, identifier);
NSMutableArray *tempArray=[[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:#"MainArray"]];
NSDictionary *stringDictionary = [NSDictionary dictionaryWithObjectsAndKeys:name, kLabelKey, value, kNumberKey,label, kNumberLabelKey,record, kReferenceKey, nil];
[tempArray addObject:stringDictionary];
NSArray *mainArray = [NSArray arrayWithArray:tempArray];
[[NSUserDefaults standardUserDefaults] setObject:mainArray forKey:#"MainArray"];
To anyone experiencing a similar problem:
My error came from the fact that I was using:
ABMultiValueCopyValueAtIndex with an identifier instead of an index.
You have to call ABMultiValueGetIndexForIdentifier and then use that index on the ABMultiValueCopyValueAtIndex.
The bottom line is Identifier!=index.
Instead of using
ABMultiValueCopyValueAtIndex(multiValue, identifier);
Which Zebs pointed out above, use...
ABMultiValueCopyValueAtIndex(multiValue, ABMultiValueGetIndexForIdentifier(multiValue, identifier));
I would make sure you're really dealing with valid multi value record type.
if (ABMultiValueGetPropertyType(phone) != kABInvalidPropertyType) {
// Do work here.
}
Actually, it would probably be safer to make sure it's really a string.
if (ABMultiValueGetPropertyType(phone) == kABMultiStringPropertyType) {
// Do work here.
}
I don't know why this wouldn't be the case. Maybe you have corrupted contacts entries? Or maybe sometimes the phone number isn't a multi value type?