gpt4 book ai didi

iPhone读/写.plist文件

转载 作者:行者123 更新时间:2023-12-03 18:49:45 26 4
gpt4 key购买 nike

我正在制作一个应用程序,我需要存储用户提供的一些信息。我尝试使用 .plist 文件来存储信息,我发现:

NSString *filePath = @"/Users/Denis/Documents/Xcode/iPhone/MLBB/data.plist";
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
[plistDict setValue:@"Man" forKey:@"Gender"];
[plistDict writeToFile:filePath atomically: YES];

问题是该应用程序只有在我在 iPhone 模拟器中测试时才能工作。我试过这个Changing Data in a Plist但没有运气。我还读过一些关于我需要将其添加到我的 bundle 中的内容,但是如何添加?

新代码:

- (IBAction)segmentControlChanged{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *plistLocation = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistLocation];

if (Gender.selectedSegmentIndex == 0) {
[plistDict setObject:@"Man" forKey:@"Gender"];
[plistDict writeToFile:plistLocation atomically: YES];
}
else
{
[plistDict setObject:@"Women" forKey:@"Gender"];
[plistDict writeToFile:plistLocation atomically: YES];
}
}

最佳答案

我猜您已将 plist 文件添加到 Xcode 中的资源文件夹中(我们放置图像的位置,如果没有,则需要先放置它)。资源数据转到[NSBundle mainBundle]默认情况下,iOS 不允许我们更改包内的数据。因此,首先您需要将该文件复制到文档目录。

这是从 NSBundle 复制文件的代码到文档目录。

- (NSString *)copyFileToDocumentDirectory:(NSString *)fileName {
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *documentDirPath = [documentsDir
stringByAppendingPathComponent:fileName];

NSArray *file = [fileName componentsSeparatedByString:@"."];
NSString *filePath = [[NSBundle mainBundle]
pathForResource:[file objectAtIndex:0]
ofType:[file lastObject]];

NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager fileExistsAtPath:documentDirPath];

if (!success) {
success = [fileManager copyItemAtPath:filePath
toPath:documentDirPath
error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable txt file file with message \
'%@'.", [error localizedDescription]);
}
}

return documentDirPath;
}

现在您可以使用返回的documentDirPath访问该文件并对其进行操作(读/写)。

plist结构是:

<array>
<dict>key-value data</dict>
<dict>key-value data</dict>
</array>

以下是将数据写入 plist 文件的代码:

/* Code to write into file */

- (void)addToMyPlist {
// set file manager object
NSFileManager *manager = [NSFileManager defaultManager];

// check if file exists
NSString *plistPath = [self copyFileToDocumentDirectory:
@"MyPlistFile.plist"];

BOOL isExist = [manager fileExistsAtPath:plistPath];
// BOOL done = NO;

if (!isExist) {
// NSLog(@"MyPlistFile.plist does not exist");
// done = [manager copyItemAtPath:file toPath:fileName error:&error];
}
// NSLog(@"done: %d",done);

// get data from plist file
NSMutableArray * plistArray = [[NSMutableArray alloc]
initWithContentsOfFile:plistPath];

// create dictionary using array data and bookmarkKeysArray keys
NSArray *keysArray = [[NSArray alloc] initWithObjects:@"StudentNo", nil];
NSArray *valuesArray = [[NSArray alloc] initWithObjects:
[NSString stringWithFormat:@"1234"], nil];

NSDictionary plistDict = [[NSDictionary alloc]
initWithObjects:valuesArray
forKeys:keysArray];

[plistArray insertObject:poDict atIndex:0];

// write data to plist file
//BOOL isWritten = [plistArray writeToFile:plistPath atomically:YES];
[plistArray writeToFile:plistPath atomically:YES];

plistArray = nil;

// check for status
// NSLog(@" \n written == %d",isWritten);
}

关于iPhone读/写.plist文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com