0

テーブルの行の挿入、削除、並べ替えなど、plistにいくつかの変更を加えました。plistはviewDidDisappearでデフォルトに変更されています。

次のコードを試しました。

-(NSString *)dataFilePath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataFile = [documentsDirectory stringByAppendingPathComponent:@"ETCategoryList.plist"];
return dataFile;
}


//Code for deleting.
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(editingStyle == UITableViewCellEditingStyleDelete){
    [[self categoriesArray]removeObjectAtIndex:[indexPath row]];
    NSArray *indexPathsToRemove = [NSArray arrayWithObject:indexPath];
    [tableView deleteRowsAtIndexPaths:indexPathsToRemove withRowAnimation:UITableViewRowAnimationLeft];
    [tableView reloadData];
    NSArray *revisedArray = [[NSArray alloc]initWithArray:self.categoriesArray];
    [revisedArray writeToFile:[self dataFilePath]  atomically:YES];
}
}
4

3 に答える 3

0

あなたのコードは次のとおりです。

NSArray *revisedArray = [[NSArray alloc]initWithArray:self.categoriesArray];
[revisedArray writeToFile:[self dataFilePath]  atomically:YES];

どちらが正しい!!!

配列にいくつかself.categoriesArrayのオブジェクト/カスタムオブジェクトが含まれている場合、直接書き込むことはできません。

NSData にアーカイブする必要があります

NSData *objData = [NSKeyedArchiver archivedDataWithRootObject:object];

または、カスタム クラスでエンドコードすることもできます。

- (void) encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:obj1 forKey:@"key1"];
    [encoder encodeFloat:obj2 forKey:@"key2"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    self = [super initWithCoder:coder];
    obj1 = [coder decodeObjectForKey:@"key1"];
    obj2 = [coder decodeObjectForKey:@"key2"];
    return self;
}
于 2013-03-06T06:58:08.607 に答える
0

あなたのコードは十分です。それは私とうまくいっています。サンプルコード:

self.clickMeArray = [[NSMutableArray alloc] init];
       for(int i =1; i<10;i++)
    {
    [self.clickMeArray addObject:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"n%d",i] forKey:[NSString stringWithFormat:@"iN%d",i]]];
    }
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dataFile = [documentsDirectory stringByAppendingPathComponent:@"MyName.plist"];
    [self.clickMeArray writeToFile:dataFile  atomically:YES];

ビルドと再起動をきれいにしてみてください。

于 2013-03-06T08:07:38.553 に答える
-1

これを試して

 - (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *lefttBtn = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStylePlain
                                                            target:self action:@selector(EditTable:)];
[[self navigationItem] setLeftBarButtonItem:lefttBtn];
[lefttBtn release];
 }
- (void) EditTable:(id)sender
 {
if(self.editing)
{
    [super setEditing:NO animated:NO];
    [table setEditing:NO animated:NO];
    [table reloadData];
    [self.navigationItem.leftBarButtonItem setTitle:@"Edit"];
    [self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStylePlain];
}
else
{
    [super setEditing:YES animated:YES];
    [table setEditing:YES animated:YES];
    [table reloadData];
    [self.navigationItem.leftBarButtonItem setTitle:@"Done"];
    [self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStyleDone];
}
}

 -(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(editingStyle == UITableViewCellEditingStyleDelete){

 [[self categoriesArray]removeObjectAtIndex:indexPath.row];
 [[self categoriesArray] writeToFile:[self dataFilePath]  atomically:YES];
 [tableView reloadData];
}

}

于 2013-03-06T06:53:10.790 に答える