How to use NSMutableDictionary to store and retrieve data
- by TechFusion
I have created Window Based application and tab bar controller as root controller. My objective is to store Text Field data values in one tab bar VC and will be accessible and editable by other VC and also retrievable when application start.
I am looking to use NSMutableDictionary class in AppDelegate so that I can access stored Data Values with keys.
//TestAppDelegate.h
extern NSString *kNamekey ;
extern NSString *kUserIDkey ;
extern NSString *kPasswordkey ;
@interface TestAppDelegate :NSObject{
UIWindow *window;
IBOutlet UITabBarController *rootController;
NSMutableDictionary *outlineData ;
}
@property(nonatomic,retain)IBOutlet UIWindow *window;
@property(nonatomic,retain)IBOutlet UITabBarController *rootController;
@property(nonatomic,retain) NSMutableDictionary *outlineData ;
@end
//TestAppDelegate.m
import "TestAppDelegate.h"
NSString *kNamekey =@"Namekey";
NSString *kUserIDkey =@"UserIDkey";
NSString *kPasswordkey =@"Passwordkey";
@implemetation TestAppDelegate
@synthesize outlineData ;
-(void)applicationDidFinishLaunching:(UIApplication)application
{
NSMutableDictionary *tempMutableCopy = [[[NSUserDefaults standardUserDefaults] objectForKey:kRestoreLocationKey] mutableCopy];
self.outlineData = tempMutableCopy;
[tempMutableCopy release];
if(outlineData == nil){
NSString *NameDefault = NULL;
NSString *UserIDdefault= NULL;
NSString *Passworddefault= NULL;
NSMutableDictionary *appDefaults = [NSMutableDictionary dictionaryWithObjectsAndKeys:
NameDefault, kNamekey ,
UserIDdefault, kUserIDkey ,
Passworddefault, kPasswordkey ,
nil];
self.outlineData = appDefaults;
[appDefaults release];
}
[window addSubview:rootController.view];
[window makeKeyAndVisible];
NSMutableDictionary *savedLocationDict = [NSMutableDictionary dictionaryWithObject:outlineData forKey:kRestoreLocationKey];
[[NSUserDefaults standardUserDefaults] registerDefaults:savedLocationDict];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)applicationWillTerminate:(UIApplication *)application
{
[[NSUserDefaults standardUserDefaults] setObject:outlineData forKey:kRestoreLocationKey];
}
@end
Here ViewController is ViewController of Navigation Controller which is attached with one tab bar.. I have attached xib file with ViewController
//ViewController.h
@interface
IBOutlet UITextField *Name;
IBOutlet UITextField *UserId;
IBOutlet UITextField *Password;
}
@property(retain,nonatomic) IBOutlet UITextField *Name
@property(retain,nonatomic) IBOutlet UITextField *UserId;
@property(retain,nonatomic) IBOutlet UITextField *Password;
-(IBAction)Save:(id)sender;
@end
Here in ViewController.m, I am storing object values with keys.
/ViewController.m
-(IBAction)Save:(id)sender{
TestAppDelegate appDelegate = (TestAppDelegate)[[UIApplication sharedApplication] delegate];
[appDelegate.outlineData setObject:Name.text forKey:kNamekey ];
[appDelegate.outlineData setObject:UserId.text forKey:kUserIDkey ];
[appDelegate.outlineData setObject:Password.text forKey:kPasswordkey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
I am accessing stored object using following method.
-(void)loadData
{
TabBarAppDelegate *appDelegate = (TabBarAppDelegate *)[[UIApplication sharedApplication] delegate];
Name = [appDelegate.outlineData objectForKey:kNamekey ];
UserId = [appDelegate.outlineData objectForKey:kUserIDkey ];
Password = [appDelegate.outlineData objectForKey:kPasswordkey];
[Name release];
[UserId release];
[Password release];
}
I am getting EXEC_BAD_ACCESS in application. Where I am making mistake ?
Thanks,