Objective-C NSMutableArray只返回一个项目

时间:2016-02-24 06:12:06

标签: ios objective-c iphone uitableview

我正在尝试通过NSMutableArray打印出NSLog中的对象列表,但出于某种原因,它似乎为空。基本上,我有一个待办事项列表,当用户输入要添加到tableview的新字符串时,它还会将该项添加到NSArray中,以便将其保存到设备中。

AddToDoItemViewController.m

#import "AddToDoItemViewController.h"
#import "ToDoItem.h"

@interface AddToDoItemViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *saveButton;
@end

@implementation AddToDoItemViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.toDoItem.itemList = [[NSMutableArray alloc] init];
}

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


#pragma mark - Navigation

// In a storyboard-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.
    if (sender != self.saveButton) return;

    if (self.textField.text.length > 0) {
        self.toDoItem = [[ToDoItem alloc] init];
        self.toDoItem.itemName = self.textField.text;
        self.toDoItem.completed = NO;

        NSLog(@"Trying to add to array: %@", self.toDoItem.itemName);
        [self.toDoItem.itemList addObject:self.toDoItem.itemName];
        NSLog(@"Array contents: %@", self.toDoItem.itemList);
    }
}

@end

AddToDoItemViewController.h

#import <UIKit/UIKit.h>
#import "ToDoItem.h"

@interface AddToDoItemViewController : UIViewController

@property ToDoItem *toDoItem;

@end

ToDoItem.h

#import <Foundation/Foundation.h>

@interface ToDoItem : NSObject

@property NSString *itemName;
@property BOOL completed;
@property (readonly) NSDate *creationDate;
@property NSMutableArray *itemList;

@end

现在从我的AddToDoItem.m文件中,当我使用NSLog尝试输出数组时,我得到了这个:

2016-02-24 01:04:49.668 ToDoList[4025:249117] Trying to add to array: ok
2016-02-24 01:04:49.669 ToDoList[4025:249117] Array contents: (null)

****'ok'是我输入的文字*****

3 个答案:

答案 0 :(得分:3)

在添加数组之前,您没有初始化数组,添加self.toDoItem.itemList = [NSMutableArray new];

编辑:

哦,我发现你在viewDidLoad中添加了self.toDoItem.itemList = [[NSMutableArray alloc] init];,但这不适合放置它,它应该在self.toDoItem = [[ToDoItem alloc] init];之后或在ToDoItem的init方法中

答案 1 :(得分:0)

首先,您需要在ToDoItem.m

创建一个init方法
- (id)init {
    self = [super init];
    if (self) {
        // Any custom setup work goes here
        self.itemList =  [[NSMutableArray alloc] init];
    }
    return self;
}

然后再次运行你的项目。

答案 2 :(得分:0)

在ToDoItem初始化之前,您正在初始化Array(itemList),因此初始化的数组仍为零。所以,它不能存储任何对象。

修改代码如下,

self.toDoItem = [[ToDoItem alloc] init];
self.toDoItem.itemList = [[NSMutableArray alloc] init];

您可以在viewDidLoad或Segue Method

添加上面的代码行 希望它可以帮到你。