私はNSDictionaryがデータを失うポストを見たことがありますが、私の場合は少し悲しいです。 NSString、NSIntegers、GLfloatsなどのデータを含むクラスがあります。 (これらのすべてがCGFloatのようなものとは異なり、NSCopyingに準拠しています)NSDictionaryがデータを失う?
私のアプリケーションでファイルにすばやくアクセスしていますが、すべて動作しますが、再度アクセスしようとします画面とNSIntegerの値は180000から何かを返します。私が知っている値は確かに4ですから何らかの理由でデータが残っていません。
ある時点でデータが失われたり解放されたりしているように感じますが、どうすれば可能かはわかりません。
編集:
HERESにコードの一部、texturedQuadsを作成して保存されている場合、これは、方法は、各アトラスのために呼ばれている私は誤用ところ私はinitメソッド
にも私が変更されていています単語ラッパー
-(void)loadAtlasData:(NSString *)atlasName
{
NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init];
if (quadLibrary == nil)
quadLibrary = [[NSMutableDictionary alloc] init];
CGSize atlasSize = [self loadTextureImage:[atlasName
stringByAppendingPathExtension:@"png"]
materialKey:atlasName];
NSArray *itemData = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:atlasName ofType:@"plist"]];
for(NSDictionary *record in itemData)
{
TexturedQuad *quad = [self texturedQuadFromAtlasRecord:record
atlasSize:atlasSize
materialKey:atlasName];
[quadLibrary setObject:quad forKey:
[record objectForKey:@"name"]];
}
[apool release];
}
-(TexturedQuad *)texturedQuadFromAtlasRecord:(NSDictionary *)record
atlasSize:(CGSize)atlasSize
materialKey:(NSString *)key
{
TexturedQuad *quad = [[TexturedQuad alloc] init];
GLfloat xLocation = [[record objectForKey:@"xLocation"] floatValue];
GLfloat yLocation = [[record objectForKey:@"yLocation"] floatValue];
GLfloat width = [[record objectForKey:@"width"] floatValue];
GLfloat height = [[record objectForKey:@"height"] floatValue];
//find the normalized texture co-ordinates
GLfloat uMin = xLocation/atlasSize.width;
GLfloat vMin = yLocation/atlasSize.height;
GLfloat uMax = (xLocation + width)/atlasSize.width;
GLfloat vMax = (yLocation + height)/atlasSize.height;
quad.uvCoordinates[0] = uMin;
quad.uvCoordinates[1] = vMax;
quad.uvCoordinates[2] = uMax;
quad.uvCoordinates[3] = vMax;
quad.uvCoordinates[4] = uMin;
quad.uvCoordinates[5] = vMin;
quad.uvCoordinates[6] = uMax;
quad.uvCoordinates[7] = vMin;
quad.materialKey = key;
return [quad autorelease];
}
第二編集:
を追加しましたplistファイルの例
dict
(key)name
(string)sync
(key)xLocation
(integer)489
(key)yLocation
(integer)36
(key)width
(integer)21
(key)height
(integer)21
/dict
本質的にその辞書は、辞書からなり、各辞書は、アトラス内の画像のデータを保持する。したがって、名前、xLocation、yLocation、width、heightがあります。
編集3:私は自動解放プールを削除すると、問題をソートするかどうかを確認し、このコントローラ
-(TexturedQuad *)quadFromAtlasKey:(NSString *)atlasKey
{
return [quadLibrary objectForKey:atlasKey];
}
誰もコードなしであなたを助けるチャンスがありません。あなたが話していることのための郵便番号。 –
また、 'NSValue'ではなくカスタムラッパークラスを作成する理由はありますか? – jtbandes
私はラッパーを使用することを意図していたが、テクスチャ付きクワッドを格納していたのかどうかは分かりません。残念ながら、NSIntegersをたくさん格納しています。 – MPainter