1

何らかの理由で、配列を nsmutabledictionary に追加できません。ここで、.h ファイルのプロパティとして宣言しています。

@interface TCMExhibitFeedStore : NSObject

@property (nonatomic, strong) NSMutableDictionary *allLevels;
@property (nonatomic, strong) NSMutableDictionary *storedLevels;

+ (TCMExhibitFeedStore *)sharedStore;

- (void)fetchExhibtFeedWithCompletion:(void (^)(NSMutableDictionary *obj, NSError *err))block;
- (TCMLevel *)createLevel:(TCMLevelRemote *)l;
- (TCMExhibit *)createExhibit:(TCMExhibitRemote *)e;

- (BOOL)saveChanges;

@end

次に、このような.mファイルの関数に空の配列を追加しようとしています

[_storedLevels setObject:[[NSMutableArray alloc] init] forKey:@"levels"];

ただし、アプリケーションをステップ実行すると、これが追加されることはありません。デバッガーを見ると、次のように表示されます

_storedLevels   NSMutableDictionary *   0x00000000

NSMutableDictionaries は私にとって目新しいものではありません。これはすべて正常に見えるため、エラーを見つけようとして少し夢中になっています。

4

2 に答える 2

4

次の行は私を混乱させます...

[_storedLevels setObject:[[NSMutableArray alloc] init] forKey:@"levels"];

上記の代わりに使用:

 self.storedLevels = [[NSMutableDictionary alloc] init];
 [self.storedLevels setObject:... forKey:@"levels"];

注: 0x00000000が表示されるたびに

これは、オブジェクトが処理されていないことを意味しますalloc

したがって、配列/値を設定する前に、それらを割り当て+初期化する必要があります。

于 2013-06-25T16:13:39.000 に答える
2

0x00000000を意味しnilます。Objective C オブジェクトのすべてのプロパティとインスタンス変数は nil に初期化されます。したがって、プロパティを初期化していないことがわかります。

の指定されたイニシャライザで辞書を初期化できますTCMExhibitFeedStore。(または、それらにアクセスして要素を追加する前に)

self.storedLevels = [NSMutableDictionary dictionary];
self.allLevels = [NSMutableDictionary dictionary];
于 2013-06-25T16:13:30.470 に答える