如何通过用户的输入以编程方式更新项目中的JSON文件?

时间:2015-09-17 00:09:06

标签: json xcode swift

在我的iOS项目中,我有一个用于设置参数的JSON文件。我想提取用户的输入并将其用作参数。例如,用户填写其邮政编码,使用邮政编码更新JSON文件,并检索该邮政编码的数据。

如何通过用户的输入以编程方式更新项目中的JSON文件?

编辑:

基本上,这表示在我的主包中使用blockerList.json文件:

class ActionRequestHandler: NSObject, NSExtensionRequestHandling {

func beginRequestWithExtensionContext(context: NSExtensionContext) {
    let attachment = NSItemProvider(contentsOfURL: NSBundle.mainBundle().URLForResource("blockerList", withExtension: "json"))!

    let item = NSExtensionItem()
    item.attachments = [attachment]

    context.completeRequestReturningItems([item], completionHandler: nil);
}

}

如果我可以使用来自其他地方的JSON数据并让请求使用它,该怎么办?这可能吗,我将如何实现?对不起,这对我来说是新的。

1 个答案:

答案 0 :(得分:1)

由于应用安全性和沙盒,应用程序包中的文件无法覆盖。但是,您可以更新存储在应用包外部的JSON,例如Documents目录。

这是您保存数据的方式:

-(void)saveJSONWithData:(NSData *)data
{
    NSString *documentsDiretory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory  inDomains:NSUserDomainMask] lastObject];
    NSString *path = [documentsDiretory stringByAppendingFormat:@“/myData.json"];
    [data writeToFile:path atomically:YES];
}

这是你将如何检索它:

NSString *fileName = @"myData.json”;
NSURL *documentsFolderURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSString *filePath = [documentsFolderURL.path stringByAppendingString:fileName];
NSString *jsonString = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
NSError *jsonError;
NSMutableDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&jsonError];

因此,从技术上讲,在NDMutableDictionary中获取已保存的JSON,附加数据并保存。希望这有帮助!