0

私のヘッダーには、以下に示すように 2 つのプロパティがあります。

@interface HZCalendarDataSource : NSObject
@property (strong, nonatomic) NSMutableArray *datesOnCalendar;
@property (strong, nonatomic) HZCalendarDay *currentDay;
@end

次に、私の実装のイニシャライザには、次のコード行があります。

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

    if (self) {
        // Alloc / Init instance variables.
        self.datesOnCalendar = [[NSMutableArray alloc] init];
                self.currentDay = [[HZCalendarDay alloc] init];

        HZCalendarDay *date = [[HZCalendarDay alloc] initOnDate:today withEventStore:self.eventStore];

        [self.datesOnCalendar addObject:date];
        // THIS line causes the app to freeze!
        // If this line is above [self.datesOnCalendar addObject:date];
        // Then it does not freeze. Why does this happen?
        self.currentDay = date;
    }

    return self;
}

私が抱えている問題は、コメントに示されているように、このself.currentDay = date;行がデバイス上のアプリをフリーズさせることです。ただし、self.currentDay = date;日付オブジェクトが に追加されている行の上に行を移動するNSMutableArrayと、コードは正常に機能します。

だから私の質問は、なぜこの順序が重要なのですか? 正しいオブジェクトに追加したself.currentDayのと同じオブジェクトを参照するように設定する必要がありますか?dateNSMutableArray

よくわからないので誰か教えていただけるとありがたいです。順序はあまり重要ではないので、今のところ、日付オブジェクトを配列に追加する前に実行されるように面倒な行を移動しましたが、教育目的で、これが最初に問題になる理由を知りたいです場所。

編集:

アプリをしばらくフリーズさせた後、[HZCalendarDateSource setCurrentDay:] を 25,827 回呼び出した後、最終的に Xcode で失敗しました。デバッガーの EXC_BAD_ACCESSS と -[__NSArrayM countByEnumratingWithState:objects:count:]; で失敗しました。

お役に立てれば。

ありがとう!

4

1 に答える 1

0

エラーメッセージを読み直したところ、実装していないのに、何らかの理由でセッターが失敗しているように聞こえました。

ただし、配列をループして、提供する引数に一致するアイテムに対していくつかのアクションを実行するヘルパー メソッドを作成しました。そのヘルパー メソッドを呼び出してsetCurrentDay:いたので、名前の競合がありました。私のコードは、私が書いた for ループで動かなくなっていました。self.datesOnCalendarfor ループがプロパティをスキャンself.currentDay = date;し、配列にオブジェクトを追加する前に for ループを実行するとsetCurrentDay:、配列が空だったため、メソッドが返されました。currentDay配列にオブジェクトを追加した後に を設定すると、setCurrentDay:メソッドがループに陥っていました。

修正は、setCurrentDay:メソッドの名前をプロパティのセッターと競合しない名前に変更しcurrentDay、for ループを調整することでした。

于 2013-07-15T01:43:26.887 に答える