populate uipickerview from sqlite - objective-c

I have a uipickerview which i want to populate with data from my sqlite database.
I have got access to the data via a mutable array via the appdelegate but when i use that as the data source it is crashing the app when used as the uipicker titleforrow section.
The count from the array is correct it just will not display any data!
Here is my header file:
#class OBMessage;
#interface LocationViewController : UIViewController <UITableViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDataSource, UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate> {
UITableViewCell *cell1;
UITableViewCell *cell2;
UITableViewCell *cell3;
UITableViewCell *cell4;
UITableViewCell *cell5;
UITableViewCell *cell6;
UITableViewCell *cell7;
UITableViewCell *cell8;
IBOutlet UILabel *addressLabel;
MKPlacemark *placemark;
IBOutlet UILabel *lLat;
IBOutlet UILabel *lLong;
IBOutlet UILabel *lHAcc;
IBOutlet UILabel *lAlt;
IBOutlet UILabel *lVAcc;
IBOutlet UILabel *lDate;
UIPickerView *singlePicker;
NSArray *pickerData;
NSString *pickedInfo;
DadsTaxiV2AppDelegate *appDelegate;
NSMutableArray *myarray;
}
#property (nonatomic, retain) IBOutlet UITableViewCell *cell1;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell2;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell3;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell4;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell5;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell6;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell7;
#property (nonatomic, retain) IBOutlet UITableViewCell *cell8;
#property (nonatomic, retain) IBOutlet UILabel *addressLabel;
#property (nonatomic, retain) IBOutlet UILabel *lLat;
#property (nonatomic, retain) IBOutlet UILabel *lLong;
#property (nonatomic, retain) IBOutlet UILabel *lHAcc;
#property (nonatomic, retain) IBOutlet UILabel *lAlt;
#property (nonatomic, retain) IBOutlet UILabel *lVAcc;
#property (nonatomic, retain) IBOutlet UILabel *lDate;
#property (nonatomic, retain) IBOutlet UIPickerView *singlePicker;
#property (nonatomic, retain) NSArray *pickerData;
#property (nonatomic, retain) NSString *pickedInfo;
#property (nonatomic, retain) NSMutableArray *myarray;
#property (nonatomic, retain) MKPlacemark *placemark;
-(IBAction)popupCameraSheet:(id)sender;
-(IBAction)popupMessageSheet:(id)sender;
-(void)showPicker;
#end
Here is bits of my m file:
- (void)viewDidLoad {
[super viewDidLoad];
appDelegate = (DadsTaxiV2AppDelegate *)[[UIApplication sharedApplication] delegate];
self.myarray = appDelegate.messageArray;
}
-(void)showPicker
{
UIActionSheet *menu = [[UIActionSheet alloc] initWithTitle:#"Select a Office Buddy Message to Include:"
delegate:self
cancelButtonTitle:#"Select" destructiveButtonTitle:#"Cancel"
otherButtonTitles:nil];
menu.tag = 4;
menu.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
singlePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 185, 0, 0)];
singlePicker.delegate=self;
singlePicker.showsSelectionIndicator = YES;
[singlePicker selectedRowInComponent:0];
[singlePicker reloadComponent:0];
[menu addSubview:singlePicker];
[menu showInView:self.view];
[menu setBounds:CGRectMake(0, 0, 320, 700)];
[singlePicker release];
[menu release];
//NSInteger row = [singlePicker selectedRowInComponent:1];
//NSString *selected = [pickerData objectAtIndex:row];
//infoLabel.text = selected;
}
#pragma mark Picker Data Source Methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
//NSLog(#"[pickerData count]=%d",[pickerData count]);
//return [pickerData count];
NSLog(#"[messagearray count]=%d",[self.myarray count]);
//return [self.pickerData count];
return [self.myarray count];
}
#pragma mark Picker Delegate Methods
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
NSLog(#"[pickerData objectAtIndex:row]=%#",[self.myarray objectAtIndex:row]);
//return [self.pickerData objectAtIndex:row];
return [self.myarray objectAtIndex:row];
}
Sorry forgot the crash log:
didSelectViewController:<LocationViewController: 0x9b7de90>
2012-09-07 20:43:07.142 OfficeBuddy[7300:c07] [messagearray count]=13
2012-09-07 20:43:07.142 OfficeBuddy[7300:c07] [messagearray count]=13
2012-09-07 20:43:07.142 OfficeBuddy[7300:c07] [pickerData objectAtIndex:row]=<OBMessage: 0x9a74ae0>
2012-09-07 20:43:07.143 OfficeBuddy[7300:c07] -[OBMessage isEqualToString:]: unrecognized selector sent to instance 0x9a74ae0
2012-09-07 20:43:07.144 OfficeBuddy[7300:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OBMessage isEqualToString:]: unrecognized selector sent to instance 0x9a74ae0'
*** First throw call stack:
(0x1759022 0x1a5ecd6 0x175acbd 0x16bfed0 0x16bfcb2 0x8ed0ff 0xbcf17a 0x7a8bc0 0x847c54 0x8483ce 0x833cbd 0x83271a 0x83c220 0xbcf6bb 0x7a77ec 0x7a84f9 0x8ca1 0xcc71 0x83e5c5 0x83e7fa 0x47585d 0x172d936 0x172d3d7 0x1690790 0x168fd84 0x168fc9b 0x22847d8 0x228488a 0x7ad626 0x2f5d 0x2ed5)
terminate called throwing an exception(lldb)

By your crash log, it seems that the data you are populating your array with is an instance of the OBMessage class. When returning from the datasource method:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
Make sure you are returning a string. So, if your array is populated by instances of the OBMessage, use a property from that class that represents what you want to present on your picker. For example, if OBMessage has a property called messageStringRepresentation, you would return:
return [[self.myarray objectAtIndex:row] messageStringRepresentation];

Try to print the array objects and confirm NSString objects. or post a code if you have used isEqualToString somewhere in your code.

Related

table view no data showing in the table cell

I have face problem in that code when i have run that code then no data show in tableview on it's table cell. there is no error in console but data not show. please Guide me what's the mistake i have do that code.
InvoiceCell.h
#import <UIKit/UIKit.h>
#interface InvoiceCell : UITableViewCell
#property (strong, nonatomic) IBOutlet UIImageView *ItemImage;
#property (strong, nonatomic) IBOutlet UILabel *ItemName;
#property (strong, nonatomic) IBOutlet UILabel *ItemType;
#property (strong, nonatomic) IBOutlet UILabel *date;
#property (strong, nonatomic) IBOutlet UILabel *Amount;
#property (strong, nonatomic) IBOutlet UILabel *status;
#end
InvoiceCell.m
#import "InvoiceCell.h"
#implementation InvoiceCell
#synthesize ItemImage,ItemName,ItemType,Amount,status;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
#end
InvoiceViewController.h
#import <UIKit/UIKit.h>
#interface InvoiceViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
#property (nonatomic,strong) NSArray *DataImages;
#property (nonatomic, strong) NSArray *DataName;
#property (nonatomic, strong) NSArray *Datatype;
#property (nonatomic, strong) NSArray *DataAmount;
#property (nonatomic, strong) NSArray *DataStatus;
#property (nonatomic, strong) NSArray *Datadate;
#end
InvoiceViewController.m
#import "InvoiceViewController.h"
#import "InvoiceCell.h"
#interface InvoiceViewController ()
#end
#implementation InvoiceViewController
#synthesize DataImages,DataName,Datatype,DataAmount,DataStatus,Datadate;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
DataImages = #[#"img1.jpg", #"img2.jpg", #"img3.jpg", #"img4.jpg", #"img5.jpg"];
DataName = #[#"Suit", #"Shirt", #"paint", #"Suit", #"Suit"];
Datatype = #[#"Brown", #"Black", #"Blue", #"Black", #"Blue"];
DataAmount = #[#"$500", #"$400",#"$500", #"$400",#"$300"];
DataStatus = #[#"Paid", #"Due", #"Paid", #"Due", #"Paid"];
Datadate = #[#"8/5/2014", #"10/6/2014",#"8/5/2014", #"10/6/2014",#"8/5/2014"];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return DataName.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = #"InvoiceCell";
InvoiceCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil)
{
cell = [[InvoiceCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
long row = [indexPath row];
NSLog(#"%#", cell.ItemName.text = DataName[row]);
cell.ItemName.text = DataName[row];
cell.ItemType.text = Datatype[row];
cell.ItemImage.image = [UIImage imageNamed:DataImages[row]];
cell.date.text = Datadate[row];
cell.Amount.text = DataAmount[row];
cell.status.text = DataStatus[row];
return cell;
}
In the Debug Window and console Data show but not show data on simulator screen in the tableview cells
Thank you.
You may have a tableView in your StoryBoard, but you have no connection to it in your code. Add this to your InvoiceViewController.h
#property IBOutlet UITableView *tableView;
and hook it up to your TableView in Interface Builder.
Then you can set the DataSource and Delegate in your InvoiceViewController.m -[viewDidLoad] method
_tableView.delegate = self;
_tableView.dataSource = self;
Now the TableView will know to call the delegate methods you implemented and you should see your data in the table.

Passing map-data between ViewController

I nearly followed this post. The viewcontroller will push via storyboard. Here the relevant code:
ViewController.m:
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(#"%#", view.annotation.title);
MapPoint *annView = view.annotation;
DetailViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:#"DetailViewController"];
dvc.title = #"my own Details";
dvc.titleTMP = annView.title;
dvc.subtitleTMP = annView.subtitle;
[self.navigationController pushViewController:dvc animated:YES];
}
MapPoint.h:
#interface MapPoint : NSObject <MKAnnotation>
{
NSString *_title;
NSString *_subtitle;
CLLocationCoordinate2D _coordinate;
UIImage *_storeImage;
}
#property (copy) NSString *title;
#property (copy) NSString *subtitle;
#property (nonatomic, readonly) UIImage *storeImage;
#property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
- (id)initWithTitle:(NSString*)title subtitle:(NSString*)subtitle coordinate:(CLLocationCoordinate2D)coordinate storeImage:(UIImage*)storeImage;
and DetailViewController:
#interface DetailViewController : UIViewController
#property (strong, nonatomic) IBOutlet UIImageView *branchImage;
#property (strong, nonatomic) IBOutlet UILabel *titleLabel;
#property (strong, nonatomic) IBOutlet UITextView *textView;
I think my mistake is in the calloutAccessoryControlTapped method but I dont know what is the real reason for this issue.
If you use a storyboard, can use prepareForSegue method and set within a class similarly as you have made.
I post a portion of code
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:#"Brs"]){
NSLog(#"segue %# ",[segue identifier]);
[segue.destinationViewController setPath:[ris_xml objectAtIndex:index_post-1] ];
}
}
In this example I set attribute "Path" of next UIViewController only if his identifier is "Brs".
For use this method is need set UIviewController identifier into storyboard right panel.
Using this isn't need to instantiate new UIViewController if you have it in storyboard.
I solved it by thinking about loading sequence.
All what to do is create temporary #properties
#interface DetailViewController : UIViewController
#property (strong, nonatomic) IBOutlet UIImageView *branchImage;
#property (strong, nonatomic) IBOutlet UILabel *titleLabel;
#property (strong, nonatomic) IBOutlet UITextView *textView;
#property (nonatomic) NSString *titleTMP; //added
#property (nonatomic) NSString *subtitleTMP; //added
and do
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(#"%#", view.annotation.title);
MapPoint *annView = view.annotation;
DetailViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:#"DetailViewController"];
dvc.title = #"my own Details";
dvc.titleTMP = annView.title;
dvc.subtitleTMP = annView.subtitle;
[self.navigationController pushViewController:dvc animated:YES];
}
The DetailViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
titleLabel.text = titleTMP;
textView.text = subtitleTMP;
}

Image is not loading on UIImageView

I am showing data in a UITableView with a thumbnail image. Initially, when the cell is clicked on, I would reload the image from the server which would take additional time, resources, and memory. Instead of doing this, I thought of passing a pointer of the thumbnail image to the view that will be on screen and display it immediately, instead of having to redownload it. However, I am running into a problem - nothing loads when I set the imageView on the new view to the old image. Here is my code:
This is in my UITableView Class:
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
NewsViewController *newsViewController = [[NewsViewController alloc] initWithNibName:#"NewsViewController" bundle:nil dictionary: dict type:d numberOfPages:1 image: cell.imageView.image];
NewsViewController.m:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil dictionary:(NSDictionary *)dict type:(NSInteger)type numberOfPages:(NSInteger)pages image:(UIImage *)image{
self = [super initWithNibName:#"NewsViewController" bundle:Nil];
if (self) {
newsText = [dict objectForKey:#"content"];
newsTitle = [dict objectForKey:#"title"];
newsDate = [dict objectForKey:#"pub_date"];
d = type;
numberOfPages = pages;
imageURL = [[NSMutableArray alloc] initWithCapacity:numberOfPages];
mainImage = [[UIImage alloc] init];
mainImage = image;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
labelBody.text= newsText;
titleView.text = newsTitle;
date.text = newsDate;
if (numberOfPages == 1) {
imageScrollView.contentSize = CGSizeMake(320, 303);
pageControl.numberOfPages = 1;
CustomImageView *customImageView = [[CustomImageView alloc] initWithFrame:imageScrollView.bounds];
[imageScrollView addSubview:customImageView];
customImageView.imageView.image = mainImage;
}
}
NewsViewController.h
#import <UIKit/UIKit.h>
#import "AdWhirlView.h"
#import "AdWhirlDelegateProtocol.h"
#class Reachability;
#interface NewsViewController : UIViewController<AdWhirlDelegate, UIScrollViewDelegate>{
AdWhirlView *adView;
IBOutlet UILabel *labelBody;
IBOutlet UILabel *titleView;
IBOutlet UILabel *subTitle;
IBOutlet UILabel *date;
IBOutlet UIScrollView *scrollView;
IBOutlet UIScrollView *imageScrollView;
IBOutlet UIImageView *backgroundImage;
IBOutlet UIImage *mainImage;
IBOutlet UIPageControl *pageControl;
NSInteger numberOfPages;
NSMutableArray *imageURL;
}
#property(nonatomic,retain)AdWhirlView *adView;
#property (nonatomic, retain) NSMutableArray *imageURL;
#property (nonatomic, retain) IBOutlet UIPageControl *pageControl;
#property (nonatomic, retain) IBOutlet UIScrollView *imageScrollView;
#property (nonatomic, weak) IBOutlet UIImageView *backgroundImage;
#property (nonatomic, retain) IBOutlet UIImageView *imageView;
#property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
#property (nonatomic, retain) IBOutlet UIImage *mainImage;
#property (nonatomic, strong) NSString *newsText;
#property (nonatomic, strong) NSString *newsTitle;
#property (nonatomic, strong) NSString *newsDate;
#property (nonatomic, assign) NSInteger numberOfPages;
#property (nonatomic, strong) IBOutlet UILabel *titleView;
#property (nonatomic, strong) IBOutlet UILabel *labelBody;
#property (nonatomic, strong) IBOutlet UILabel *subTitle;
#property (nonatomic, strong) IBOutlet UILabel *date;
#property (nonatomic, retain) Reachability* internetReachable;
#property (nonatomic, assign) BOOL internetActive;
-(void) checkNetworkStatus:(NSNotification *)notice;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil dictionary: (NSDictionary *)dict type:(NSInteger)type numberOfPages:(NSInteger) pages image:(UIImage *)image;
- (BOOL)checkInternet;
- (void)doStuff;
- (IBAction)ad;
#end
I am using mainImage as a (UIImage *) and trying to replace the image in my customImageView class with the main Image but nothing is showing up. What am I missing here?
I guess you'd like to build some sort of caching mechanism for your UIImageView. One of the easiest ways to get all of this working is by making use of the AFNetworking library.
AFNetworking extends UIImageView with some extra methods for loading images from remote sources. AFNetworking has caching build-in, no need to reinvent the wheel :)
Take a look on the following sites:
AFNetworking
UIImageView (AFNetworking)

XCode 4.2: Semantic Issue '#end' is missing in implementation context & Unexpected '#' in program

I am new to XCODE, but I am trying to learn. Basically my project is a rework of Nada Jaksic's Creating a table-based form on the iPhone". I would appreciate being informed where I went wrong in my coding, so that I can learn from my mistakes. Any and all help is definitely appreciated!
From the SignupTableViewController.h file:
#import <UIKit/UIKit.h>
#interface SignupTableViewController : UITableViewController<UITextFieldDelegate, UIActionSheetDelegate>
{
IBOutlet UITableViewCell *cellExaminername;
IBOutlet UITableViewCell *cellExamineraddress;
IBOutlet UITableViewCell *cellExaminercity;
IBOutlet UITableViewCell *cellExaminerstate;
IBOutlet UITableViewCell *cellExaminerzip;
IBOutlet UITableViewCell *cellExamineremail;
IBOutlet UITableViewCell *cellSearchthroughdate;
IBOutlet UITableViewCell *cellTitleheldby;
IBOutlet UITableViewCell *cellPropertyaddress1;
IBOutlet UITableViewCell *cellPropertyaddress2;
IBOutlet UITableViewCell *cellPropertycity;
IBOutlet UITableViewCell *cellPropertystate;
IBOutlet UITableViewCell *cellProperyzip;
IBOutlet UITableViewCell *cellTitlesearchnotes;
IBOutlet UITextField* txtExaminername;
IBOutlet UITextField* txtExamineraddress;
IBOutlet UITextField* txtExaminercity;
IBOutlet UITextField* txtExaminerstate;
IBOutlet UITextField* txtExaminerzip;
IBOutlet UITextField* txtExamineremail;
IBOutlet UITextField* txtSearchthroughdate;
IBOutlet UITextField* txtTitleheldby;
IBOutlet UITextField* txtPropertyaddress1;
IBOutlet UITextField* txtPropertyaddress2;
IBOutlet UITextField* txtPropertycity;
IBOutlet UITextField* txtPropertystate;
IBOutlet UITextField* txtPropertyzip;
IBOutlet UITextField* txtTitlesearchnotes;
UIActivityIndicatorView* activityIndicator;
}
#property (nonatomic, retain) IBOutlet UITableViewCell *cellExaminername;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellExamineraddress;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellExaminercity;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellExaminerstate;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellExaminerzip;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellExamineremail;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellSearchthroughdate;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellTitleheldby;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellPropertyaddress1;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellPropertyaddress2;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellPropertycity;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellPropertystate;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellProperyzip;
#property (nonatomic, retain) IBOutlet UITableViewCell *cellTitlesearchnotes;
#property (nonatomic, retain) IBOutlet UITextField* txtExaminername;
#property (nonatomic, retain) IBOutlet UITextField* txtExamineraddress;
#property (nonatomic, retain) IBOutlet UITextField* txtExaminercity;
#property (nonatomic, retain) IBOutlet UITextField* txtExaminerstate;
#property (nonatomic, retain) IBOutlet UITextField* txtExaminerzip;
#property (nonatomic, retain) IBOutlet UITextField* txtExamineremail;
#property (nonatomic, retain) IBOutlet UITextField* txtSearchthroughdate;
#property (nonatomic, retain) IBOutlet UITextField* txtTitleheldby;
#property (nonatomic, retain) IBOutlet UITextField* txtPropertyaddress1;
#property (nonatomic, retain) IBOutlet UITextField* txtPropertyaddress2;
#property (nonatomic, retain) IBOutlet UITextField* txtPropertycity;
#property (nonatomic, retain) IBOutlet UITextField* txtPropertystate;
#property (nonatomic, retain) IBOutlet UITextField* txtPropertyzip;
#property (nonatomic, retain) IBOutlet UITextField* txtTitlesearchnotes;
-(void)signup;
#end
From my SignupTableViewController.m file:
#import "SignupTableViewController.h"
#implementation SignupTableViewController
#synthesize cellExaminername, cellExamineraddress, cellExaminercity, cellExaminerstate, cellExaminerzip, cellExamineremail, cellSearchthroughdate, cellTitleheldby, cellPropertyaddress1, cellPropertyaddress2, cellPropertycity, cellPropertystate, cellProperyzip, cellTitlesearchnotes;
#synthesize txtExaminername, txtExamineraddress, txtExaminercity, txtExaminerstate, txtExaminerzip, txtExamineremail, txtSearchthroughdate, txtTitleheldby, txtPropertyaddress1, txtPropertyaddress2, txtPropertycity, txtPropertystate, txtPropertyzip, txtTitlesearchnotes;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
//self.clearsSelectionOnViewWillAppear = NO;
UIBarButtonItem* btnSubmitSignup = [[UIBarButtonItem alloc]initWithTitle:NSLocalizedString(#"Join",#"") style:UIBarButtonItemStylePlain target:self action:#selector(signup)];
[[self navigationItem] setRightBarButtonItem:btnSubmitSignup];
}
#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 14;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0) {
return cellExaminername;
}
if (indexPath.row == 1) {
return cellExamineraddress;
}
if (indexPath.row == 2) {
return cellExaminercity;
}
if (indexPath.row == 3) {
return cellExaminerstate;
}
if (indexPath.row == 4) {
return cellExaminerzip;
}
if (indexPath.row == 5) {
return cellExamineremail;
}
if (indexPath.row == 6) {
return cellSearchthroughdate;
}
if (indexPath.row == 7) {
return cellTitleheldby;
}
if (indexPath.row == 8) {
return cellPropertyaddress1;
}
if (indexPath.row == 9) {
return cellPropertyaddress2;
}
if (indexPath.row == 10) {
return cellPropertycity;
}
if (indexPath.row == 11) {
return cellPropertystate;
}
if (indexPath.row == 12) {
return cellProperyzip;
}
if (indexPath.row == 13) {
return cellTitlesearchnotes;
}
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:#"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
#pragma mark -
#pragma mark Memory management
-(void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Relinquish ownership any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
// For example: self.myOutlet = nil;
}
-(void) signup
{
// make sure the keyboard is hidden
[txtExaminername resignFirstResponder];
[txtExamineraddress resignFirstResponder];
[txtExaminercity resignFirstResponder];
[txtExaminerstate resignFirstResponder];
[txtExaminerzip resignFirstResponder];
[txtExamineremail resignFirstResponder];
[txtSearchthroughdate resignFirstResponder];
[txtTitleheldby resignFirstResponder];
[txtPropertyaddress1 resignFirstResponder];
[txtPropertyaddress2 resignFirstResponder];
[txtPropertycity resignFirstResponder];
[txtPropertystate resignFirstResponder];
[txtPropertyzip resignFirstResponder];
[txtTitlesearchnotes resignFirstResponder];
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
[activityIndicator setCenter:CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0+20)];
[activityIndicator startAnimating];
[self.view addSubview:activityIndicator];
if (![self validateSignupForm])
return;
//do your signup code here
}
-(BOOL)validateSignupForm
{
BOOL rtn = YES;
// Declare your Alert, NSArray, increment int
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:NSLocalizedString(#"FormIncomplete", #"") delegate:self cancelButtonTitle:#"OK" otherButtonTitles:nil];
NSArray *fieldArray;
int i = 0;
// Load up our field array with the UITextField Values
fieldArray = [NSArray arrayWithObjects:
[NSString stringWithFormat:#"%#",txtExaminername.text],
[NSString stringWithFormat:#"%#",txtExamineraddress.text],
[NSString stringWithFormat:#"%#",txtExaminercity.text],
[NSString stringWithFormat:#"%#",txtExaminerstate.text],
[NSString stringWithFormat:#"%#",txtExaminerzip.text],
[NSString stringWithFormat:#"%#",txtExamineremail],
[NSString stringWithFormat:#"%#",txtSearchthroughdate.text],
[NSString stringWithFormat:#"%#",txtTitleheldby.text],
[NSString stringWithFormat:#"%#",txtPropertyaddress1.text],
[NSString stringWithFormat:#"%#",txtPropertyaddress2.text],
[NSString stringWithFormat:#"%#",txtPropertycity.text],
[NSString stringWithFormat:#"%#",txtPropertystate.text],
[NSString stringWithFormat:#"%#",txtPropertyzip.text],
[NSString stringWithFormat:#"%#",txtTitlesearchnotes.text]];
// loop through the array, alert if text field is empty, and break the the loop, other wise increment i
for (NSString *fieldText in fieldArray){
NSLog(fieldText); // make sure all is reading correctly in the console
if([fieldText isEqualToString:#""]){
[alert show];
rtn = NO;
break; // break out!!
}
i++;
}
// check that all the field were passed (i == array.count)
//if(i == [[NSNumber numberWithInt: fieldArray.count] intValue]){
//NSLog(#"Passed validation...");
//rtn = YES;
// {
//if (rtn)
#end
Your -validateSignupForm method is missing a closing }.
A hint that this might be true is Xcode's desire to indent #end.

Converting UITextField to UILabel through view Controllers

I'm sure there is a simple explanation for this.
I am looking to transfer the data (not store) but transfer the text the user types into a text field and display it as a UILabel in another ViewController.
I already know how to convert text entered by the user into a label on the same viewcontroller.
I guess my problem is importing.
the .h:
#interface ViewController : UIViewController {
IBOutlet UITextField *firstPerson;
IBOutlet UITextField *secondPerson;
IBOutlet UIButton *calculateButton;
NSString *firstName;
NSString *secondName;
}
#property (nonatomic, retain) IBOutlet UITextField *firstPerson;
#property (nonatomic, retain) IBOutlet UITextField *secondPerson;
#property (nonatomic, retain) NSString *firstName;
#property (nonatomic, retain) NSString *secondName;
#property (nonatomic, retain) IBOutlet UIButton *calculateButton;
-(IBAction)calculate;
#end
the .m:
-(IBAction)calculate {
//Linked to UIButton
//This is the first View Controller.
// firstName = firstPerson.text;
// secondName = secondPerson.text;
secondViewController = [[ShowStats alloc] init];
}
my secondview controller .m (ShowStats):
#import "ShowStats.h"
#import "ViewController.h"
- (void)viewDidLoad
{
firstName = firstPerson.text;
secondName = secondPerson.text;
[super viewDidLoad];
}
Many thanks!
EDIT
ViewController.h
#import <UIKit/UIKit.h>
#import "ShowStats.h"
#interface ViewController : UIViewController {
IBOutlet UITextField *firstPerson;
IBOutlet UITextField *secondPerson;
IBOutlet UIButton *calculateButton;
//NSString *firstName;
// NSString *secondName;
}
#property (nonatomic, retain) IBOutlet UITextField *firstPerson;
#property (nonatomic, retain) IBOutlet UITextField *secondPerson;
//#property (nonatomic, retain) NSString *firstName;
//#property (nonatomic, retain) NSString *secondName;
#property (nonatomic, retain) IBOutlet UIButton *calculateButton;
-(IBAction)calculate;
#end
ViewController.m
#import "ViewController.h"
#import "ShowStats.h"
#implementation ViewController
#synthesize firstPerson, secondPerson;
//#synthesize firstName, secondName;
#synthesize calculateButton;
ShowStats *secondViewController;
-(IBAction)calculate {
secondViewController = [[ShowStats alloc] init];
secondViewController.firstName = firstPerson.text;
}
ShowStats.h
#interface ShowStats : UIViewController{
IBOutlet UILabel *nameStats;
}
#property (nonatomic, retain) IBOutlet UILabel *nameStats;
#property (nonatomic, retain) NSString *firstName;
#property (nonatomic, retain) NSString *secondName;
#end
ShowStats.m
- (void)viewDidLoad
{
nameStats.text = [NSString stringWithFormat:#"%#", firstName];
//secondLabel.text = self.secondName;
[super viewDidLoad];
}
Make these properties in ShowStats class
#property (nonatomic, retain) NSString *firstName;
#property (nonatomic, retain) NSString *secondName;
and change this to this
-(IBAction)calculate {
secondViewController = [[ShowStats alloc] init];
secondViewController.firstName = firstPerson.text;
secondViewController.secondName = secondPerson.text;
}
then set these strings to UILablel in your viewDidLoad
In ShowStats.h, add the following:
#property(nonatomic, copy) NSString* firstName;
#property(nonatomic, copy) NSString* secondName;
In ShowStats.m add/update the following:
#synthesize firstName, secondName;
//...
- (id) init {
if (self = [super init]) {
self.firstName = nil;
self.secondName = nil;
//...
}
return self;
}
- (void) dealloc {
self.firstName = nil;
self.secondName = nil;
//...
[super dealloc];
}
- (void)viewDidLoad {
//or even better, do this in viewWillAppear instead
firstLabel.text = self.firstName;
secondLabel.text = self.secondName;
//...
[super viewDidLoad];
}
Finally, in ViewController.m, implement calculate like this:
-(IBAction)calculate {
//Linked to UIButton
//This is the first View Controller.
// firstName = firstPerson.text;
// secondName = secondPerson.text;
secondViewController = [[ShowStats alloc] init];
secondViewController.firstName = firstPerson.text;
secondViewController.secondName = secondPerson.text;
//display the view controller here
[secondViewController autorelease];
}
If it is a navigation then in your SecondViewController you can call:
ViewController *viewController = [self.navigationController.viewControllers objectAtIndex:0];
firstName = [[viewController firstPerson] text];
secondName = [[viewController secondPerson] text];
Or you could do the following for a Single View app:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
ViewController *viewController = [appDelegate viewController];
firstName = [[viewController firstPerson] text];
secondName = [[viewController secondPerson] text];
* EDIT *
Add two labels to your .h file (nonatomic, retain) & synthesize in .m . Initialize the labels in viewDidLoad then set them (assuming they are called label1 and label2):
[label1 setText:firstName];
[label2 setText:secondName];