Ваш код работает для меня без каких-либо изменений. Я создал инструмент командной строки на основе Foundation (Mac OS X) с таким кодом:
#import <Foundation/Foundation.h>
// Model.h
@interface Model : NSObject {
NSMutableDictionary *piers;
}
@property (nonatomic,retain) NSMutableDictionary *piers;
-(void) createModel;
@end
// Model.m
@implementation Model
@synthesize piers;
-(id) init {
if (self = [super init]) {
self.piers = [[NSMutableDictionary alloc] initWithCapacity:2];
[self createModel];
}
return self;
}
-(void) createModel {
[piers setObject:@"happy" forKey:@"foobar"];
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here...
Model *model = [[Model alloc] init];
NSLog(@"Model: %@", [model.piers objectForKey:@"foobar"]);
[pool drain];
return 0;
}
и это дало мне ожидаемый результат:
2010-04-06 12: 10: 19.510 Модель [3967: a0f] Модель: счастливая
Как говорит Кенни ТМ, ваше использование себя немного неправильно. в вашем init
общий шаблон
NSMutableDictionary *aPiers = [[NSMutableDictionary alloc] initWithCapacity:2];
self.piers = aPiers;
[aPiers release];
Позже в коде вы должны использовать self.piers
.
Попробуйте создать проект, подобный моему, и посмотрите, сохраняется ли проблема. Вы, вероятно, обнаружите, что проблема в другом месте.