0

ラテン語の動詞の活用を確認するためのアプリを書いていますが、問題が発生しています。NSDictionaryエンディングの配列を作成しましたが、それらのエンディングでを初期化しようとするcountと、辞書のは常に0になります。何が間違っているのでしょうか。

ここにありBlackBox.hます:

#import <Foundation/Foundation.h>

@interface BlackBox : NSObject

@property (weak) NSDictionary *setOfEndings;

- (void)determineEndingsToUse;

@end

関連するメソッドは次のBlackBox.mとおりです。

- (void)determineEndingsToUse
{
NSArray *keys=[[NSArray alloc] initWithObjects:@"first person singular", @"second person singular", @"third person singular", @"first person plural", @"second person plural", @"third person singular", nil];
NSArray *endingsPossible = [[NSArray alloc] initWithObjects:@"ō", @"ās", @"at", @"āmus", @"ātis", @"ant",  nil];
NSLog(@"endingsPossible count: %d", endingsPossible.count);  //This logs 6, correctly.
if (!self.setOfEndings)
{
    self.setOfEndings = [[NSDictionary alloc] initWithObjects:endingsPossible forKeys:keys];
}
NSLog(@"setOfEndings count: %d",self.setOfEndings.count); //This logs 0 instead of 6.  Why?
}

何かご意見は?

4

1 に答える 1

1

setOfEndings は弱いポインターであるため、割り当てられた辞書への強い参照がないため、すぐに解放されます。

参照を strong に変更するか、以下のように変更することで機能させることができます。

 NSDictionary *dict = [[NSDictionary alloc] initWithObjects:endingsPossible forKeys:keys];
 self.setOfEndings = dict;

//By default dict is a strong reference to the allocated dictionary.
于 2012-10-19T12:10:22.797 に答える