NSMutableArray添加和保存对象

时间:2013-04-27 13:16:39

标签: ios nsmutablearray plist

iOS新手,我遇到了一个问题,就是在NSMutable Array中添加对象并在App中的另一个视图上显示数组。 TableView中的其他视图上的数据显示正常,但是当我向Array添加另一个项目时(使用下面的代码),它只是替换那里的内容,而不是添加到数组中。

- (void) postArray {
tableData = [[NSMutableArray alloc] initWithCapacity:10];
tableData = [[NSMutableArray alloc] initWithObjects: nil];
[tableData addObject:favShot]; }

-(NSString *) saveFilePath {

NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, TRUE);
return [[path objectAtIndex:0] stringByAppendingPathComponent:@"savefile.plist"]; }

- (void) viewWillDisappear:(BOOL)animated: (UIApplication *) application  {
NSArray *values = [[NSArray alloc] initWithObjects:tableData, nil];
[values writeToFile:[self saveFilePath] atomically: TRUE]; }

- (void)viewDidLoad  {

tableData = [[NSMutableArray alloc] initWithObjects: nil];

NSString *myPath = [self saveFilePath];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];

if (fileExists)
{

    NSArray *values = [[NSArray alloc] initWithContentsOfFile:myPath];
    tableData = [values mutable copy];
}

UIApplication *myApp = [UIApplication sharedApplication];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationDidEnterBackground:)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:myApp];

[super viewDidLoad];  }

谢谢。

2 个答案:

答案 0 :(得分:0)

每当您致电postArray时,您正在创建NSMutableArray的实例,然后将其丢弃(如果您不使用ARC,则将其泄露)。然后,您要创建另一个NSMutableArray实例。然后你将一个对象(favShot)添加到第二个实例。

下次你打电话给postArray时,它会扔掉你的旧阵列并创建2个新阵列。

您要做的是在创建控制器实例时或在加载视图时创建tableData实例。然后,不要将tableData = ...设置为丢弃旧实例。只需添加和删除对象。

修改

- (void) postArray {
[tableData addObject:favShot];
}

- (NSString *)saveFilePath {
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, TRUE);
return [[path objectAtIndex:0] stringByAppendingPathComponent:@"savefile.plist"];
}

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

[tableData writeToFile:[self saveFilePath] atomically: TRUE];
}

- (void)viewDidLoad  {
NSString *myPath = [self saveFilePath];

BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];

if (fileExists)
{
    tableData = [[NSMutableArray alloc] initWithContentsOfFile:myPath];
} else {
    tableData = [[NSMutableArray alloc] initWithObjects: nil];
}

UIApplication *myApp = [UIApplication sharedApplication];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationDidEnterBackground:)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:myApp];

[super viewDidLoad];
}

答案 1 :(得分:0)

尝试

- (void) viewWillDisappear:(BOOL)animated: (UIApplication *) application 
{
    NSString *filePath = [self saveFilePath];

    NSMutableArray *savedArray = [NSMutableArray arrayWithContentsOfFile:filePath];
    if (!savedArray) savedArray = [NSMutableArray array];

    [savedArray addObject:tableData];

    [savedArray writeToFile:filePath atomically:YES];
}