在 NSUserDefaults 中存储 swiftyJSON 返回的数据时遇到问题...相同的数据源
Posted
技术标签:
【中文标题】在 NSUserDefaults 中存储 swiftyJSON 返回的数据时遇到问题...相同的数据源【英文标题】:Having issues storing swiftyJSON returned data in NSUserDefaults...same data source 【发布时间】:2016-10-26 12:59:02 【问题描述】:抱歉,这篇文章太长了……大量数据。 我在将 JSON 存储到 NSUserDefaults 时遇到问题。我已经构建了两个页面上都返回 JSON 的后端 php 服务。我不确定为什么一个 JSON 能够被存储而另一个不能......
提前致谢
一般来说这里是返回数据的 PHP 代码
header('Content-Type: application/json; charset=utf-8');
echo json_encode($rows,JSON_PRETTY_PRINT);
socialmedia.php 返回:
"socialsites": [
"type": "Government",
"entries": [
"id": "1",
"name": "Pete",
"address": "https:\/\/website.com",
"medium": "WWW",
"section": "Government",
"zip": "02055",
"active": "Y"
]
,
"type": "School",
"entries": [
"id": "2",
"name": "SITE2",
"address": "https:\/\/twitter.com\/test",
"medium": "TWITTER",
"section": "School",
"zip": "02055",
"active": "Y"
]
,
"type": "Organizations",
"entries": [
"id": "3",
"name": "This Week Inserser",
"address": "https:\/\/www.resr.com",
"medium": "WWW",
"section": "Organizations",
"zip": "02055",
"active": "Y"
]
]
我可以使用
将它存储到 NSUSERDefaultvar swiftyJsonVar: JSON = ""
var userdefaults = UserDefaults.standard
func gettheData()
if let test = self.userdefaults.object(forKey: "socialtableJSON")
print("beginkey")
print(test)
print("endkey")
let whichzip = userdefaults.object(forKey: "workingZip")
Alamofire.request(openEVTjson,method:.get,parameters: ["zip_code":whichzip!]).validate().responseJSON
responseData in
switch responseData.result
case .success(let jJson):
self.keys.removeAll()
self.post.removeAll()
self.swiftyJsonVar = JSON(jJson)
self.userdefaults.set(jJson, forKey: "socialtableJSON")
这一切都很好......并且按预期工作......
eventsJSON2.php 返回
"events": [
"category": "SCHOOLS"
,
"category": "RELIGOUS ORGANIZATIONS"
,
"category": "NON-RELIGOUS ORGANIZATIONS",
"events2": [
"news_id": "12",
"news_id_parent": "12",
"series_id": "5",
"news_style": "Single-Day",
"news_finalized": "0",
"news_owner": "2",
"news_title": "TEST FOR Change JSON THIS IS A VERY LONG TITLE TO MAKE",
"news_contact": "Mr Contact",
"news_listdate": "1473944001",
"news_start_date": "1477530600",
"news_expiration": "1477537200",
"news_story": "This is the story text which will be the story text<br \/>This is the story text which will be the story text<br \/>This is the story text which will be the story text<br \/>This is the story text which will be the story text",
"news_image1": null,
"news_image2": null,
"news_ilue": "Y",
"news_priority": "N",
"news_location": "7 Main Street",
"news_location_zip": "02052",
"news_time": "",
"news_category": "3",
"news_admission": "50",
"news_needticketing": "N",
"news_tickets": "10",
"news_tickets_pur": null,
"news_tickets_ser": "Y",
"news_phone": "555-555-5555",
"news_email": "no@no.com",
"news_web": "http:\/\/www.cnn.com",
"news_sponsor": "Me Sponsor",
"news_story_released": "Y",
"news_organization": "1",
"news_basezip": "02052",
"news_surround": "N",
"news_attach": null,
"news_paid": "NP",
"news_weeks": "1",
"news_rate": null,
"txn_id": null,
"news_pay_auth_date": null,
"news_pay_date": null,
"org_id": "1",
"org_name": "New N' Towne",
"base_zip": "02052",
"description": "Organization for New People",
"cat_id": "3"
]
,
"category": "GOVERNMENT"
,
"category": "RETAIL"
,
"category": "YARD SALES"
,
"category": "OPEN HOUSES"
]
我去存放它
var swiftyJsonVar: JSON = ""
var userdefaults = UserDefaults.standard
Alamofire.request(openEVTjson,method:.get,parameters: ["zip_code":whichzip]).validate().responseJSON
responseData in
switch responseData.result
case .success(let jJson):
self.swiftyJsonVar = JSON(jJson)
self.keys.removeAll()
//let test = self.swiftyJsonVar.rawString()
//print(test)
self.userdefaults.set(jJson, forKey: "lastEventsJSON")
self.userdefaults.set(Date().timeIntervalSince1970, forKey: "lastEventsLoad")
我最终得到了
2016-10-26 08:55:31.813 JSONTesting[79483:4081659] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object
events = (
category = SCHOOLS;
,
category = "RELIGOUS ORGANIZATIONS";
,
category = "NON-RELIGOUS ORGANIZATIONS";
events2 = (
"base_zip" = 02052;
"cat_id" = 3;
description = "Organization for New People";
"news_admission" = 50;
"news_attach" = "<null>";
"news_basezip" = 02052;
"news_category" = 3;
"news_contact" = "Mr Contact";
"news_email" = "no@no.com";
"news_expiration" = 1477537200;
"news_finalized" = 0;
"news_id" = 12;
"news_id_parent" = 12;
"news_ilue" = Y;
"news_image1" = "<null>";
"news_image2" = "<null>";
"news_listdate" = 1473944001;
"news_location" = "7 Main Street";
"news_location_zip" = 02052;
"news_needticketing" = N;
"news_organization" = 1;
"news_owner" = 2;
"news_paid" = NP;
"news_pay_auth_date" = "<null>";
"news_pay_date" = "<null>";
"news_phone" = "555-555-5555";
"news_priority" = N;
"news_rate" = "<null>";
"news_sponsor" = "Me Sponsor";
"news_start_date" = 1477530600;
"news_story" = "This is the story text which will be the story text<br />This is the story text which will be the story text<br />This is the story text which will be the story text<br />This is the story text which will be the story text";
"news_story_released" = Y;
"news_style" = "Single-Day";
"news_surround" = N;
"news_tickets" = 10;
"news_tickets_pur" = "<null>";
"news_tickets_ser" = Y;
"news_time" = "";
"news_title" = "TEST FOR Change JSON THIS IS A VERY LONG TITLE TO MAKE";
"news_web" = "http://www.cnn.com";
"news_weeks" = 1;
"org_id" = 1;
"org_name" = "New N' Towne";
"series_id" = 5;
"txn_id" = "<null>";
);
,
category = GOVERNMENT;
,
category = RETAIL;
,
category = "YARD SALES";
,
category = "OPEN HOUSES";
);
for key lastEventsJSON'
【问题讨论】:
您需要通过删除 NSNull 值或将其替换为默认值来清理您的 JSON。 我添加了 array_walk_recursive($value, function (&$item, $key) $item = null === $item ? '' : $item; );到我 JSON_ENCODE 之前的 PHP 结束。如果我能更多地投票给你,那么我会的。这是一个救生员……在这上面花了 10 个小时。如果您将此作为答案发布,我会检查它并对其进行投票 请注意,可以将NSData
对象保存在您的NSUserDefaults
中,这样您就不必担心<null>
的值。
【参考方案1】:
您需要通过删除 NSNull 值或将其替换为默认值来修剪 JSON。
【讨论】:
以上是关于在 NSUserDefaults 中存储 swiftyJSON 返回的数据时遇到问题...相同的数据源的主要内容,如果未能解决你的问题,请参考以下文章
NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
如何使用 NSUserDefaults 在 Swift 中存储自定义类数组?