0

@property (非アトミック、強力) NSMutableArray *authorMutableArray;

- (id)init {
    self = [super init];
    if (self) {

        self.authorMutableArray = [[NSMutableArray alloc] initWithObjects:@"First Row", @"Second Row", nil];

        for (NSString *string in authorMutableArray) {
            NSLog(@"String: %@", string);
        }

        NSLog(@"Init in Add Model with Author count:%i", [authorMutableArray count]);


    }
}

プロパティへのアクセス例。NSLog は常にカウントを 0 として示します。

    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0) { 
        if (indexPath.row == [self.addModel.authorMutableArray count] - 1 ) {
            NSLog(@"count of %i", [self.addModel.authorMutableArray count]);
            return  UITableViewCellEditingStyleInsert;
        }

        else {
            return  UITableViewCellEditingStyleDelete;

        }
    }

    else {
        return UITableViewCellEditingStyleNone;
    }
}

init で作成している配列は、このメソッドを超えて値を保持していません。何か理由は?for ループは、配列内の両方のオブジェクトを表示します。init メソッドが呼び出された後にこれを尋ねようとすると、配列が空になります。

更新: 皆様、お時間と目を向けていただきありがとうございます。init メソッドで self を返すのを忘れていました。

4

3 に答える 3

5

initメソッドはselfを返すべきではありませんか?

于 2012-04-18T18:55:21.807 に答える
0

ここでは C++ や Java を扱っていません。-initオブジェクトのメソッドはMUST値を返します。

この癖により、実際には次のような非常に興味深いことが可能になります。

-(id) init {
    NSLog(@"Creating new instance of singleton object...");

    #if __has_feature(objc-arc)
    self = singleton_instance;
    #else
    [self release];
    self = [singleton_instance retain];
    #endif   

    return self;
}

また、ある種のクラス「ポージング」が可能になり、特定のクラスのオブジェクトがいつ初期化されるかを正確に追跡できます(これは、この回答のトピックが深すぎます)。

于 2012-04-18T19:06:37.227 に答える
0

クラスのインターフェイス ファイル (.h ファイル) で、次のように宣言します。

@interface Your_Class_Name : UIViewController {
   NSMutableArray *authorMutableArray;

}

@property (nonatomic, strong) NSMutableArray *authorMutableArray;
//i dont know why you prefered strong, chose retain and try again please
于 2012-04-18T18:54:51.857 に答える