我已经调查了其他用户类似的问题,但我仍然无法找到我的代码问题。
这是问题所在。
当应用程序启动时,我调用一个名为setupDirectory的方法,该方法创建(或从应用程序包中复制,如果需要)一个plist用于名称,一个用于configs:
@implementation Data
static NSString * NamePlist;
static NSString * ConfigPlist;
+(void) setupDirectory
{
//Names
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * dataPath = [paths objectAtIndex:0];
dataPath = [dataPath stringByAppendingPathComponent:@"NamesPlist.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:dataPath]) {
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"NamesPlist" ofType:@"plist"];
[fileManager copyItemAtPath:sourcePath toPath:dataPath error:nil];
}
//Config
NSString *configPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
configPath = [configPath stringByAppendingPathComponent:@"ConfigPlist.plist"];
if (![fileManager fileExistsAtPath:configPath]) {
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"ConfigPlist" ofType:@"plist"];
[fileManager copyItemAtPath:sourcePath toPath:configPath error:nil];
}
NamePlist = dataPath;
ConfigPlist = configPath;
}
然后,当我需要添加一个名称时,我调用方法Add name将plist添加到名称中:
+(void) addName: (NSString *) name andConfigs: (NSArray *) configs
{
// Name
// Get the old content of the plist file
NSDictionary *oldContent = [NSDictionary dictionaryWithContentsOfFile:Namelist];
// Copy the old content of the plist file to a new dictionary
NSMutableDictionary * newContent = [oldContent mutableCopy];
//Add the new config to the dictionary
[newContent setObject:[NSNull null] forKey:name];
// Set the new dictionary as the plist file
[newContent writeToFile:NamePlist atomically:YES];
//Configs
oldContent = [NSDictionary dictionaryWithContentsOfFile:ConfigPlist];
// Copy the old content of the plist file to a new dictonary
newContent = [oldContent mutableCopy];
//Add the new config to the dictionary
[newContent setObject:configs forKey:name];
// Set the new dictionary as the plist file
[newContent writeToFile:ConfigPlist atomically:YES];
}
但是当我需要从plist获取信息时我什么都没得到,所以它没有写出来?
+(NSArray *) getAllNames
{
NSDictionary * names = [NSDictionary dictionaryWithContentsOfFile:NamePlist];
NSArray * allNames = [(NSArray*) [names allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
return allNames;
}
GetallNames返回一个空数组。
很抱歉,如果这个问题已经得到解答,但我真的很想找,但仍然不知道出了什么问题
编辑1:
我使用writeToFile的返回值来检查是否有任何失败。 我从configsPlist获得了一个带有writeToFile的YES,但是来自NamesPlist的带有writeToFile的NO。 所以我认为配置工作正常,但不是namesPlist
编辑2:
使用调试器我注意到![fileManager fileExistsAtPath:configPath]
和!fileManager fileExistsAtPath:dataPath]
返回NO
所以我实际上并没有进入这些语句。
解决方案
好吧,我给了它另一个机会,并尝试用字符串而不是[NSNull null]创建,现在它可以工作......我想我应该使用[NSNull null]来创建一个带有null对象的字典
答案 0 :(得分:0)
我建议转到文档目录:/ Users / administrator / Library / Application Support / iPhone Simulator / YourApp / Documents /并在每次添加任何项目时检查plist。有了你可以确认" NamesPlist.plist"和#34; ConfigPlist"是否正在更新。