基本上,我正在製作一個應用程序,將數據保存到自定義文件類型中。我已經設置了將字典存檔並將其保存到文件中。然後加載文件,解開字典,並將其放在應該存放的位置。NSDictionary不會正確保存數據
不幸的是,我無法讓我的字典正確保存數據。下面有兩個例子。
工作
NSDictionary *theDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"test", @"test2", nil];
這將節省我希望它的方式「測試」,我可以完全加載它。
不工作
NSString *aString = @"test";
NSDictionary *theDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:aString, @"test2", nil];
這只是給了我一個完全空字符串,當我加載文件。
這是我的確切代碼。
- (NSData*)dataOfType:(NSString *)typeName error:(NSError **)outError {
[fileContents release];
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
NSDictionary *theDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:[lifeText stringValue], @"life", [moveText stringValue], @"move", nil];
[archiver encodeObject:theDictionary forKey:@"SomeKeyValue"];
[archiver finishEncoding];
fileContents = [NSData dataWithData:data];
[archiver release];
return fileContents;
}
- (BOOL) readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
fileContents = [data retain];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
loadedFileDictionary = [[unarchiver decodeObjectForKey:@"SomeKeyValue"] retain];
[unarchiver finishDecoding];
[unarchiver release];
NSLog(@"%@", [loadedFileDictionary valueForKey:@"life"]);
[Card_Building loadLife:[loadedFileDictionary valueForKey:@"life"] move:[loadedFileDictionary valueForKey:@"move"]];
return YES;
}
另一個字符串現在設置在別處,但我需要把它們放在這裏。然後,我用「卡Builder.m」下面的代碼放到哪裏我希望他們中的字符串:
+ (void) loadLife:(NSString*)life move:(NSString*)move; {
lifeString = life;
moveString = move;
importData = TRUE;
}
我不明白爲什麼這是行不通的。每次我考,我得到一個空字符串和以下錯誤消息:
2011-06-09 13:33:56.082 HS-Cards[6479:a0f] *** Assertion failure in -[NSTextFieldCell _objectValue:forString:errorDescription:], /SourceCache/AppKit/AppKit-1038.35/AppKit.subproj/NSCell.m:1531
2011-06-09 13:33:56.082 HS-Cards[6479:a0f] Invalid parameter not satisfying: aString != nil
會有人請告訴我爲什麼這是不行的?
編輯:與此更新的代碼,它加載一次,並給我相同的錯誤消息,但它然後拒絕加載。有任何想法嗎?
我固定的這些問題,但它仍然不會一切工作。還有其他建議嗎? – Justin 2011-06-11 02:46:05
已經有幾天了,我還沒有聽到任何迴應。我是否假設你找不到可能導致此問題的其他問題?順便說一下,我已經更新了代碼。 – Justin 2011-06-15 21:55:42
'loadLife:move:'中的'lifeString'和'moveString'是什麼?您不能在類方法中訪問實例變量。涉及'NSTextFieldCell'的錯誤消息和這個類'CardBuilder'之間的連接完全不清楚。文本字段單元格在哪裏? 'readFromData:...'中的'NSLog'的結果是什麼? – 2011-06-16 07:37:12