PDA

View Full Version : Passing an Object between two views




GhostDZ9
May 24, 2011, 12:20 PM
Hey guys,

I was just wondering what is the best way to pass an object between two views and how would I go about doing so?

Regards,

Ghost



dantastic
May 24, 2011, 01:21 PM
Use either delegates or implement a singleton class.

GhostDZ9
May 25, 2011, 08:58 AM
//
// TimerViewController.h

#import <UIKit/UIKit.h>
#import "StaticClass.h"
#import "TimeOptionController.h"



@interface TimerViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
NSMutableArray *sections;
NSDateFormatter *formatter;
IBOutlet UITableView *tvc;
NSString *duration1;
}

@property (nonatomic, assign) NSDateFormatter *formatter;
@property (retain) NSMutableArray *sections;
@property (nonatomic, retain) UITableView *tvc;
@property (nonatomic, retain) NSString *duration1;


-(IBAction)startTimeBtnPressed;


@end



//TimerViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}

if(indexPath.section == 0){
cell.textLabel.text = [sections objectAtIndex:indexPath.row];
cell.detailTextLabel.text = duration1;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

return cell;
}



//TimeOptionController.h

#import <UIKit/UIKit.h>


@interface TimeOptionController : UITableViewController {
NSArray *rows;
int selectedRow;
NSString *duration;

}
@property (retain) NSArray *rows;
@property (nonatomic, retain) NSString *duration;
@property (nonatomic, retain) NSString *duration1;


@end





//TimeOptionController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
selectedRow = indexPath.row;
duration = (NSString *) [rows objectAtIndex:indexPath.row];
duration1 = duration;
[self.tableView reloadData];

}



I wanna copy the value of duration from the TimeOptionController to the TimerViewController.


SOMEONE PLEASE HELP ME!

jaybee2002
May 25, 2011, 09:12 AM
Does duration have to be an NSString?

Im quite new to programming and i have only worked out how to pass int's floats's and things like that.

jon

GhostDZ9
May 25, 2011, 09:14 AM
Yes it does because the value of it is filling in the DetailedTextLabel.text

jaybee2002
May 25, 2011, 09:19 AM
yea well you cant use a global because with a nsstring you will have a world of memory leaks and what not u might wana go with what dantastic said and go with a singleton.

http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

this is quite a good article to read about them.

jon

GhostDZ9
May 25, 2011, 09:26 AM
I have read that article, if you can suggest another way to do what i am trying to do then please do so

jaybee2002
May 25, 2011, 09:30 AM
have you tried making it global?

dejo
May 25, 2011, 09:35 AM
The issue you are butting heads with is normally solved with something commonly called data persistence. There are a number of ways to code a solution, including singletons, using the app delegate (which is a singleton), NSUserDefaults, or even setting up a property in one class and setting its value in the other instance, among others. As well, there have been a number of threads in this forum that have previously covered this topic. Search for "data persistence" or "sharing values/variables between views".

GhostDZ9
May 25, 2011, 09:39 AM
Thanks Dejo, ill look into it further