需要帮助将用户的文本添加到NSArray

时间:2011-03-23 07:56:00

标签: iphone objective-c

当我们点击表格的+时,我会提示用户输入文字。它们会显示带有textField提示符的UIAlert,然后文本将作为字符串保存在字典中。

到目前为止,我有以下代码:

- (void)viewDidLoad
{
    NSArray *myData = [NSMutableArray arrayWithContentsOfFile:@"mydata"]; 

    if (myData == nil)
    {
      myData = [NSMutableArray array];  
    }

    [super viewDidLoad];

    UIBarButtonItem * addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showPrompt)];
    [self.navigationItem setLeftBarButtonItem:addButton];
    [addButton release];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

-(void)showPrompt
{
    AlertPrompt *prompt = [AlertPrompt alloc];
    prompt = [prompt initWithTitle:@"Add Workout Day" message:@"\n \n Please enter title for workout day" delegate:self cancelButtonTitle:@"Cancel" okButtonTitle:@"Add"];

    [prompt show];
    [prompt release];
}

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != [alertView cancelButtonIndex])
    {
        NSString *entered = [(AlertPrompt *)alertView enteredText];
        NSLog([NSString stringWithFormat:@"%@", entered]);
    }
}

NSlog显示输入的文本,但如何将其保存在我的数组中?

另外,我应该将文本保存为字符串,包含字符串的字典,还是包含字符串的数组本身?因为在这些其他字典中都会有一个字典或数组,其中包含用户可以选择的对象(他们可以选择的对象存储在一个单独的plist中)。

例如,用户在“武器日”中输入提示,然后保存到数组中,他可以从我存储在data.plist中的手臂的所有练习中进行选择

使用新代码进行更新:

#import "RoutineTableViewController.h"
#import "AlertPrompt.h"

@implementation RoutineTableViewController
@synthesize routineArray;

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

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    /*
    NSArray *myData = [NSMutableArray arrayWithContentsOfFile:@"mydata"]; 

    if (myData == nil)
    {
      myData = [NSMutableArray array];  
    }
    */

    [super viewDidLoad];

    UIBarButtonItem * addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showPrompt)];
    [self.navigationItem setLeftBarButtonItem:addButton];
    [addButton release];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

-(void)showPrompt
{
    AlertPrompt *prompt = [AlertPrompt alloc];
    prompt = [prompt initWithTitle:@"Add Workout Day" message:@"\n \n Please enter title for workout day" delegate:self cancelButtonTitle:@"Cancel" okButtonTitle:@"Add"];

    [prompt show];
    [prompt release];
}

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != [alertView cancelButtonIndex])
    {
        NSString *entered = [(AlertPrompt *)alertView enteredText];
        NSLog([NSString stringWithFormat:@"%@", entered]);
        [self.routineArray addObject:entered];    }
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        // do delete
        // get count of rows in UITableView and hide table if it's empty
    }
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [routineArray count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 0;
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [self.routineArray objectAtIndex:indexPath.row];

    return cell;
}

更新3:

@implementation RoutineTableViewController
@synthesize myArray;

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

- (void)dealloc
{
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    myArray = [[NSMutableArray alloc] init]; 
    myData = [[NSMutableArray arrayWithContentsOfFile:@"mydata"] retain]; 

    if (myData == nil)
    {
        myData = [NSMutableArray array];  
    }

    [super viewDidLoad];

    UIBarButtonItem * addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showPrompt)];
    [self.navigationItem setLeftBarButtonItem:addButton];
    [addButton release];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

-(void)showPrompt
{
    AlertPrompt *prompt = [AlertPrompt alloc];
    prompt = [prompt initWithTitle:@"Add Workout Day" message:@"\n \n Please enter title for workout day" delegate:self cancelButtonTitle:@"Cancel" okButtonTitle:@"Add"];

    [prompt show];
    [prompt release];
}

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != [alertView cancelButtonIndex])
    {
        NSString *entered = [(AlertPrompt *)alertView enteredText];
        NSLog([NSString stringWithFormat:@"%@", entered]);
        //if(myData && entered)
        {
            [myArray addObject:entered];
        }
    }
    NSLog(@"%@",[myArray objectAtIndex:0]);
    [tableView reloadData];
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        // do delete
        // get count of rows in UITableView and hide table if it's empty
    }
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [myArray count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 0;
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [self.myArray objectAtIndex:indexPath.row];

    return cell;
}

3 个答案:

答案 0 :(得分:0)

建议您在NSMutableArray

中保存用户文字

在.h文件中声明NSMutableArray变量,

  NSMutableArray *myData;

在源文件中.m:

 myData = [[NSMutableArray arrayWithContentsOfFile:@"mydata"] retain]; 

    if (myData == nil)
    {
      myData = [NSMutableArray array];  
    }

在数组中添加文字。

if (buttonIndex != [alertView cancelButtonIndex])
    {
        NSString *entered = [(AlertPrompt *)alertView enteredText];
        NSLog([NSString stringWithFormat:@"%@", entered]);
        if(myData && entered)
        {
              [myArray addObject:entered];
        }
    }

答案 1 :(得分:0)

目前的答案都没有用,因为他们没有查看你的代码!只是做addObject对你没有帮助,事实上你添加它时你的代码可能无法编译。

您的数组是局部变量,因此它仅在viewDidLoad方法中可用。如果您尝试在willDismissWithButtonIndex方法中添加任何内容而不更改声明数组的方式,则会导致编译器错误。第一步是让您的myData变量适用于您的所有方法。您可以使用属性来实现这一目标 - 如果您不确定如何声明属性,您应该考虑在潜入之前退一步并在Objective-C上阅读更多内容。

因此,在您的头文件中,您可以声明:

@property (nonatomic, retain) NSMutableArray *myArray;

在您的实施文件中:

@synthesize myArray
- (void)viewDidLoad
{
    self.myData = [NSMutableArray arrayWithContentsOfFile:@"mydata"]; 

....


- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != [alertView cancelButtonIndex])
    {
        NSString *entered = [(AlertPrompt *)alertView enteredText];
        [self.myArray addObject:entered];

希望能帮到你!

答案 2 :(得分:-1)

将您的数组作为类的一部分,并在方法中使用其引用将其添加到数组中。

[myArray addObject:entered];