0

我的问题只在于我的选择器“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

米:

//
//  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
4

1 回答 1

1

fetchIfNeededInBackgroundWithBlock调用是异步 的。

这一行:

 [self.pStrings addObject:name];

将数据填充到 self.pStrings 中。

您希望在您拨打此电话时填写其值:

   [self.proPicker reloadAllComponents];

在 viewDidLoad 方法的末尾。在加载该数据之前,您不知何故不需要重新加载所有组件。

如果您已经重新加载了组件,我建议您添加一个 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];
}
于 2013-10-25T02:21:09.340 回答