我正在使用plists来保存/加载NSMutableArray,
代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *prsPath = [documentsDirectory stringByAppendingPathComponent:@"records.plist"];
prs = [[NSMutableArray alloc] initWithContentsOfFile:prsPath];
当我在代码中的其他地方使用代码的最后一句时,它说:“prsPath”未声明。 (我在ViewDidLoad中加载我的代码)当我添加一个对象时,它不会保存它,它甚至都不显示。 (加载最后一句话)
答案 0 :(得分:3)
我正在使用这种方法,它的工作是100%
- (void) writeToPlist: (NSString*)fileName withData:(NSMutableArray *)data
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *finalPath = [documentsDirectory stringByAppendingPathComponent:fileName];
[data writeToFile:finalPath atomically: YES];
/* This would change the firmware version in the plist to 1.1.1 by initing the NSDictionary with the plist, then changing the value of the string in the key "ProductVersion" to what you specified */
}
这个从plist文件中读取的方法:
- (NSMutableArray *) readFromPlist: (NSString *)fileName {
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *finalPath = [documentsDirectory stringByAppendingPathComponent:fileName];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:finalPath];
if (fileExists) {
NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile:finalPath];
return arr;
} else {
return nil;
}
}
希望它可以帮到你。
答案 1 :(得分:0)
[[NSMutableArray alloc] initWithContentsOfFile:prsPath]
将加载 plist ant用它初始化数组。你是否已经在那条路上存在?您可能还需要记录prsPath以查看它是否正确。
通常,您首先通过调用[[NSFileManager defaultManager] fileExistsAtPath:prsPath]
来检查路径中是否存在plist。如果没有,则初始化一个空数组。
稍后您可以通过调用[prs writeToFile:prsPath atomically:YES]
保存它。
请注意,您无法从plists初始化NSMutableArrays
。从plists加载的数组和字典总是不可变的。您必须先将plist加载到NSArray
,然后从NSMutableArray
初始化NSArray
。