gpt4 book ai didi

ios - UIPickerView 为空

转载 作者:行者123 更新时间:2023-11-29 03:32:34 26 4
gpt4 key购买 nike

我的问题只与我的选择器“proPicker”有关。奇怪的是,对象仍在数组中,因为即使选择器显示为空白,我的文本字段中的文本也会发生变化....

我相信我已经按照所有步骤来填充选择器,10 次中有 9 次选择器显示正确的信息,但有时它只是显示空白..

这是我的代码:

.h:

    //
// EditDebateViewController.h
//
//
// Created by Jacob Klapper on 10/17/13.
//
//

#import <UIKit/UIKit.h>
#import <Parse/Parse.h>

@interface EditDebateViewController : UITableViewController <UITextFieldDelegate, UIPickerViewDelegate,UIActionSheetDelegate>

@property UIDatePicker *pickerView;

@property (weak, nonatomic) IBOutlet UITextField *topic;
@property (weak, nonatomic) IBOutlet UITextField *pro;
@property (weak, nonatomic) IBOutlet UITextField *con;
@property (weak, nonatomic) IBOutlet UITextField *pVotes;
@property (weak, nonatomic) IBOutlet UITextField *cVotes;
@property (weak, nonatomic) IBOutlet UITextField *abs;

@property (weak, nonatomic) IBOutlet UITextField *date;

@property NSMutableArray *pChoices;
@property NSMutableArray *pStrings;
@property NSMutableArray *cChoices;
@property NSMutableArray *cStrings;
@property NSMutableArray *proTest;
@property UIPickerView *proPicker;

@property PFObject *obj;

@end

.m:

//
// EditDebateViewController.m
//
//
// Created by Jacob Klapper on 10/17/13.
//
//

#import "EditDebateViewController.h"

@interface EditDebateViewController ()

@end

@implementation EditDebateViewController

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
//self.date = [[UIDatePicker alloc]init];
self.date.delegate = self;
self.pro.delegate = self;
self.con.delegate = self;
self.pVotes.delegate = self;
self.cVotes.delegate = self;
self.abs.delegate = self;
self.topic.delegate = self;



self.pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 322, 0, 0)];
self.pickerView.datePickerMode = UIDatePickerModeDate;
self.pickerView.hidden = true;
self.pickerView.date = [NSDate date];
[self.pickerView addTarget:self
action:@selector(updateLabel:)
forControlEvents:UIControlEventValueChanged];

//[self.view addSubview:pickerToolbar];
[self.tableView addSubview:self.pickerView];
//self.pickerView.del
self.date.inputView = self.pickerView;


NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setLocale:enUSPOSIXLocale];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@"MMM dd, yyyy "];

self.proPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 322, 0, 0)];
self.proPicker.hidden = true;
self.proPicker.delegate = self;


[self.tableView addSubview:self.proPicker];
self.pro.inputView = self.proPicker;

self.pStrings = [[NSMutableArray alloc]init];
self.cStrings = [[NSMutableArray alloc]init];
self.pChoices = [[NSMutableArray alloc]initWithArray:[self.obj objectForKey:@"PR"]];
self.cChoices = [[NSMutableArray alloc]init];
self.proTest = [[NSMutableArray alloc]init];

//self.pChoices = [self.obj objectForKey:@"PR"];
//self.cChoices = [self.obj objectForKey:@"CR"];
NSLog(@"Choices Now: %@", self.pChoices);
NSLog(@"Choices Count: %lu", (unsigned long)[self.pChoices count]);

for (PFUser *us in self.pChoices) {
//NSLog(@"Hi");
//PFUser *user = [self.pChoices objectAtIndex:i];
[us fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {

//[self.pChoices addObject:object];
//NSString *name = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
//NSLog(name);
//[self.proTest addObject:object];
//NSLog(@"The value before pStrings is: %@", name);
//[self.pStrings addObject:name];
//NSLog(@"This is spot: %@", [self.pStrings objectAtIndex:i]);
[self.proTest addObject:object];
NSString *name = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
[self.pStrings addObject:name];
NSLog(@"Pro Test: %@", self.proTest);
NSLog(@"Pro Strings: %@", self.pStrings);
NSLog(@"User: %@", us);
NSLog(@"Object: %@", object);
}];

}

NSLog(@"Strings: %@", self.pStrings);
NSLog(@"Pro Test: %lu", (unsigned long)[self.proTest count]);
//NSLog(@"%@", self.pStrings);

self.topic.text = [self.obj objectForKey:@"Topic"];
self.date.text = [df stringFromDate:[self.obj objectForKey:@"Date"]];
NSLog(@"Hi Test");
if([[NSString stringWithFormat:@"%@", [self.obj objectForKey:@"proVotes"] ] isEqualToString:@"0"])
{
NSLog(@"ITS NULL");
self.pVotes.text = @"";
}
//self.pVotes.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"proVotes"] ];

else
{

self.pVotes.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"proVotes"] ];
}
if([[NSString stringWithFormat:@"%@", [self.obj objectForKey:@"conVotes"] ] isEqualToString:@"0"])
{
self.cVotes.text = @"";
}

else
{
self.cVotes.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"conVotes"] ];
}
if([[NSString stringWithFormat:@"%@", [self.obj objectForKey:@"Abstentions"] ] isEqualToString:@"0"])
{
self.abs.text = @"";
}

else
{
self.abs.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"Abstentions"]];
}

/*
NSLog(@"Here");

NSLog(@"%@", proU);
self.pro.text = [NSString stringWithFormat:@"%@ %@", [proU objectForKey:@"firstName"], [proU objectForKey:@"lastName"]];

PFUser *conU = [self.obj objectForKey:@"Con"];
//self.con.text = [NSString stringWithFormat:@"%@ %@", [conU objectForKey:@"firstName"], [conU objectForKey:@"lastName"]];
*/


PFUser *proU = [self.obj objectForKey:@"Pro"];
[proU fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {

self.pro.text = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
}];

PFUser *conU = [self.obj objectForKey:@"Con"];
[conU fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {

self.con.text = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
}];

[self.pickerView setDate:[self.obj objectForKey:@"Date"]];

[self.proPicker reloadAllComponents];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

-(void)viewDidAppear:(BOOL)animated
{
[self.proPicker reloadAllComponents];
}

/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/

/*
#pragma mark - Navigation

// In a story board-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}

*/



- (IBAction)backcustom:(UIBarButtonItem *)sender {

[self.navigationController popViewControllerAnimated:YES];
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//[aTextField resignFirstResponder];

NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setLocale:enUSPOSIXLocale];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@"MMM dd, yyyy "];

if(textField == self.topic)
{
NSLog(@"Topic");
}

if(textField == self.date)
{
self.pickerView.hidden = false;
self.date.text = [df stringFromDate:self.pickerView.date];
}

if(textField == self.pro)
{
self.proPicker.hidden = false;
//self.pro.text =

NSInteger rowSelectionKg = [self.proPicker selectedRowInComponent:0]; //get currrent row of picker for first column

NSString *tempKg = [self.pStrings objectAtIndex:rowSelectionKg]; //use row as index to get value in corresponding array of choices in picker

self.pro.text = tempKg;
}

//pickerViewPopup = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
return YES;

}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (pickerView == self.proPicker) {
self.pro.text = [self.pStrings objectAtIndex:row];
}

else
{
NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setLocale:enUSPOSIXLocale];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@"MMM dd, yyyy "];
self.date.text = [df stringFromDate:self.pickerView.date];
//NSString *strFirstPickerView = [_ty objectAtIndex:row];
//_providerType.text = strFirstPickerView;
}


}

- (void)updateLabel:(id)sender {
NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setLocale:enUSPOSIXLocale];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@"MMM dd, yyyy "];
self.date.text = [df stringFromDate:self.pickerView.date];
}

- (IBAction)saveChanges:(UIBarButtonItem *)sender {

[self.obj setObject:self.topic.text forKey:@"Topic"];
[self.obj setObject:[NSNumber numberWithInt:self.pVotes.text.intValue] forKey:@"proVotes"];
[self.obj setObject:[NSNumber numberWithInt:self.cVotes.text.intValue] forKey:@"conVotes"];
[self.obj setObject:[NSNumber numberWithInt:self.abs.text.intValue] forKey:@"Abstentions"];

[self.obj setObject:self.pickerView.date forKey:@"Date"];
NSLog(@"Saving...");
[self.obj saveInBackground];
[self performSegueWithIdentifier:@"afterSave" sender:self];
//[self.navigationController popViewControllerAnimated:YES];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Section: %ld", (long)[indexPath section]);
NSLog(@"Row: %ld", (long)[indexPath row]);

if([indexPath section] == 1 && [indexPath row] == 0)
{
NSLog(@"Right Cell");
UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete Debate" otherButtonTitles:nil];
popupQuery.tag = 1;

[popupQuery showInView:self.view];


}


}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

if(actionSheet.tag == 1)
{
if(buttonIndex == 0)
{
[self.obj deleteInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
[self performSegueWithIdentifier:@"afterSave" sender:self];
//[self loadObjects];
}];
}
}


}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
if(pickerView == self.proPicker)
{
NSLog(@"First Log");
NSLog(@"In numComponents: %@",self.pStrings);
return 1;
}
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
if(pickerView == self.proPicker)
{
NSLog(@"Right Picker");
NSLog(@"Count in numRows: %lu", (unsigned long)[self.pStrings count]);
return [self.pStrings count];
}
//return [_ty count];
return [self.pStrings count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{

if(pickerView == self.proPicker)
{
NSLog(@"Picked goooood");
return [self.pStrings objectAtIndex:row];
}

return [self.pStrings objectAtIndex:row];

}

@end

最佳答案

fetchIfNeededInBackgroundWithBlock 调用是异步的。

这一行:

 [self.pStrings addObject:name];

将数据填充到 self.pStrings 中。

您希望在您调用此电话时填写其值:

   [self.proPicker reloadAllComponents];

在 viewDidLoad 方法的末尾。在加载数据之前,您不需要重新加载AllComponents。

我建议添加一个 BOOL 来跟踪您是否已经重新加载了组件。如果有,只需在获取数据结束时再次执行此操作即可。像这样:

- (void)viewDidLoad
{
[super viewDidLoad];
__block BOOL hasCompletedSetup = NO;
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
//self.date = [[UIDatePicker alloc]init];
self.date.delegate = self;
self.pro.delegate = self;
self.con.delegate = self;
self.pVotes.delegate = self;
self.cVotes.delegate = self;
self.abs.delegate = self;
self.topic.delegate = self;



self.pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 322, 0, 0)];
self.pickerView.datePickerMode = UIDatePickerModeDate;
self.pickerView.hidden = true;
self.pickerView.date = [NSDate date];
[self.pickerView addTarget:self
action:@selector(updateLabel:)
forControlEvents:UIControlEventValueChanged];

//[self.view addSubview:pickerToolbar];
[self.tableView addSubview:self.pickerView];
//self.pickerView.del
self.date.inputView = self.pickerView;


NSDateFormatter *df = [[NSDateFormatter alloc] init];
//[df setLocale:enUSPOSIXLocale];
[df setTimeZone:[NSTimeZone systemTimeZone]];
[df setDateFormat:@"MMM dd, yyyy "];

self.proPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 322, 0, 0)];
self.proPicker.hidden = true;
self.proPicker.delegate = self;


[self.tableView addSubview:self.proPicker];
self.pro.inputView = self.proPicker;

self.pStrings = [[NSMutableArray alloc]init];
self.cStrings = [[NSMutableArray alloc]init];
self.pChoices = [[NSMutableArray alloc]initWithArray:[self.obj objectForKey:@"PR"]];
self.cChoices = [[NSMutableArray alloc]init];
self.proTest = [[NSMutableArray alloc]init];

//self.pChoices = [self.obj objectForKey:@"PR"];
//self.cChoices = [self.obj objectForKey:@"CR"];
NSLog(@"Choices Now: %@", self.pChoices);
NSLog(@"Choices Count: %lu", (unsigned long)[self.pChoices count]);

for (PFUser *us in self.pChoices) {
//NSLog(@"Hi");
//PFUser *user = [self.pChoices objectAtIndex:i];
[us fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {

//[self.pChoices addObject:object];
//NSString *name = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
//NSLog(name);
//[self.proTest addObject:object];
//NSLog(@"The value before pStrings is: %@", name);
//[self.pStrings addObject:name];
//NSLog(@"This is spot: %@", [self.pStrings objectAtIndex:i]);
[self.proTest addObject:object];
NSString *name = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
[self.pStrings addObject:name];
NSLog(@"Pro Test: %@", self.proTest);
NSLog(@"Pro Strings: %@", self.pStrings);
NSLog(@"User: %@", us);
NSLog(@"Object: %@", object);
}];
if (hasCompletedSetup) {
[self.proPicker reloadAllComponents];
}
}

NSLog(@"Strings: %@", self.pStrings);
NSLog(@"Pro Test: %lu", (unsigned long)[self.proTest count]);
//NSLog(@"%@", self.pStrings);

self.topic.text = [self.obj objectForKey:@"Topic"];
self.date.text = [df stringFromDate:[self.obj objectForKey:@"Date"]];
NSLog(@"Hi Test");
if([[NSString stringWithFormat:@"%@", [self.obj objectForKey:@"proVotes"] ] isEqualToString:@"0"])
{
NSLog(@"ITS NULL");
self.pVotes.text = @"";
}
//self.pVotes.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"proVotes"] ];

else
{

self.pVotes.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"proVotes"] ];
}
if([[NSString stringWithFormat:@"%@", [self.obj objectForKey:@"conVotes"] ] isEqualToString:@"0"])
{
self.cVotes.text = @"";
}

else
{
self.cVotes.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"conVotes"] ];
}
if([[NSString stringWithFormat:@"%@", [self.obj objectForKey:@"Abstentions"] ] isEqualToString:@"0"])
{
self.abs.text = @"";
}

else
{
self.abs.text = [NSString stringWithFormat:@"%@", [self.obj objectForKey:@"Abstentions"]];
}

/*
NSLog(@"Here");

NSLog(@"%@", proU);
self.pro.text = [NSString stringWithFormat:@"%@ %@", [proU objectForKey:@"firstName"], [proU objectForKey:@"lastName"]];

PFUser *conU = [self.obj objectForKey:@"Con"];
//self.con.text = [NSString stringWithFormat:@"%@ %@", [conU objectForKey:@"firstName"], [conU objectForKey:@"lastName"]];
*/


PFUser *proU = [self.obj objectForKey:@"Pro"];
[proU fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {

self.pro.text = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
}];

PFUser *conU = [self.obj objectForKey:@"Con"];
[conU fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {

self.con.text = [NSString stringWithFormat:@"%@ %@", [object objectForKey:@"firstName"], [object objectForKey:@"lastName"]];
}];

[self.pickerView setDate:[self.obj objectForKey:@"Date"]];

hasCompletedSetup = YES;
[self.proPicker reloadAllComponents];
}

关于ios - UIPickerView 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com