-1

UITableView に入るたびに、配列に新しいオブジェクトを追加したいと考えています。問題は、このビューから出ると UITableView が割り当て解除されるため、UITableView クラスで配列を宣言できないことです。

「array」という新しい NSObject クラスを作成しましたが、その使い方がわかりません。

Array.h

#import <Foundation/Foundation.h>

@interface Array : NSObject
{
    NSMutableArray *tableau;
}

@property (strong) NSMutableArray* tableau;
- (id)initWithName:(NSMutableArray *)atableau  ;

- (NSMutableArray*) tableau;

- (void) setTableau:(NSMutableArray*) newTableau;

+(Tableau*)instance;

@end

配列.m

#import "Array.h"

@implementation Array

- (id)initWithName:(NSMutableArray *)atableau {
    if ((self = [super init]))

    {
        self.tableau = atableau;
    }
    return self;

}

- (NSMutableArray*) tableau{
    return tableau;
}

- (void) setTableau:(NSMutableArray*) newTableau{
    tableau = newTableau;
}

+(Tableau*)instance{
    static dispatch_once_t once;
    static Array *sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] initWithName:@"jean" ];
    });
    return sharedInstance;
}
@end

UITableViewController.m

...
- (void)viewDidAppear:(BOOL)animated
{
    if (![[Array instance] tableau]) {

    }
    [[[Array instance]tableau]addObject:@"koko"];

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    NSLog(@"appear");

}

...

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [[[Array instance] tableau] removeObjectAtIndex:indexPath.row];
        [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.
    }
...

私がそれをすると、このエラーが発生しました:

'NSInvalidArgumentException'、理由: '-[__NSCFConstantString addObject:]: 認識されないセレクターがインスタンス 0x5aa4 に送信されました'

今後ともよろしくお願いいたします。

4

1 に答える 1

1

コードのこの行の問題:

sharedInstance = [[self alloc] initWithName:@"jean" ];

NSStringその結果、代わりにインスタンスを割り当てますNSMutableArray

- (id)initWithName:(NSMutableArray *)atableau {
    self = [super init];
    if (self) {
       self.tableau = atableau;
    }
    return self;
}

次のように変更します。

sharedInstance = [[self alloc] initWithName:[[NSMutableArray alloc] initWithObjects:@"jean", nil]];
于 2013-11-12T11:48:15.417 に答える