iPhone 突然发现,setting配置文件中的DefaultValue可能拿不了值

按照我的想法,如果用户没有在setting设置值且有default-value,那么应该获取的是default-value,因为打开setting也能看见这些值.但是今天突然发现好像不是那么会事.获取的是null.看了AppPrefs的代码,它也进行了判断.如下:

 

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
	[window addSubview:[navigationController view]];
	
	NSString *testValue = [[NSUserDefaults standardUserDefaults] stringForKey:kFirstNameKey];
	if (testValue == nil)
	{
		// no default values have been set, create them here based on what's in our Settings bundle info
		//
		NSString *pathStr = [[NSBundle mainBundle] bundlePath];
		NSString *settingsBundlePath = [pathStr stringByAppendingPathComponent:@"Settings.bundle"];
		NSString *finalPath = [settingsBundlePath stringByAppendingPathComponent:@"Root.plist"];

		NSDictionary *settingsDict = [NSDictionary dictionaryWithContentsOfFile:finalPath];
		NSArray *prefSpecifierArray = [settingsDict objectForKey:@"PreferenceSpecifiers"];

		NSString *firstNameDefault;
		NSString *lastNameDefault;
		NSNumber *nameColorDefault;
		NSNumber *backgroundColorDefault;
		
		NSDictionary *prefItem;
		for (prefItem in prefSpecifierArray)
		{
			NSString *keyValueStr = [prefItem objectForKey:@"Key"];
			id defaultValue = [prefItem objectForKey:@"DefaultValue"];
			
			if ([keyValueStr isEqualToString:kFirstNameKey])
			{
				firstNameDefault = defaultValue;
			}
			else if ([keyValueStr isEqualToString:kLastNameKey])
			{
				lastNameDefault = defaultValue;
			}
			else if ([keyValueStr isEqualToString:kNameColorKey])
			{
				nameColorDefault = defaultValue;
			}
			else if ([keyValueStr isEqualToString:kBackgroundColorKey])
			{
				backgroundColorDefault = defaultValue;
			}
		}

		// since no default values have been set (i.e. no preferences file created), create it here		
		NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
										firstNameDefault, kFirstNameKey,
										lastNameDefault, kLastNameKey,
										nameColorDefault, kNameColorKey,
										backgroundColorDefault, kBackgroundColorKey,
									  nil];
		[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
		[[NSUserDefaults standardUserDefaults] synchronize];
	}
	
	// we're ready to do, so lastly set the key preference values
	firstName = [[NSUserDefaults standardUserDefaults] stringForKey:kFirstNameKey];
	lastName = [[NSUserDefaults standardUserDefaults] stringForKey:kLastNameKey];
	textColor = [[NSUserDefaults standardUserDefaults] integerForKey:kNameColorKey];
	backgroundColor = [[NSUserDefaults standardUserDefaults] integerForKey:kBackgroundColorKey];
}

 

Unity项目CI/CD实战:基于Jenkins的自动化构建流水线搭建指南 持续集成与持续交付(CI/CD)是现代软件工程的核心实践,它通过自动化构建、测试和部署流程,将开发人员从重复性劳动中解放出来,显著提升团队协作效率和软件交付质量。其核心原理在于将代码变更快速、频繁地集成到主干,并通过自动化流水线确保每次集成的稳定性。对于资源密集、多平台适配复杂的游戏开发而言,CI/CD的技术价值尤为突出,它能有效解决手动打包效率低下、环境不一致、人为错误多等痛点。在Unity游戏开发中,结合Jenkins这一高度可定制的开源自动化服务器,可以构建一套覆盖代码提交、多平台编译、自动签名、产物 阅读详情

相关推荐

微信小程序自定义日期选择器组件:picker-view 实现 3 种联动与 2 种样式定制

本文详细介绍了如何在微信小程序中使用`picker-view`组件实现高度自定义的日期选择器,包括三种联动模式(年月日、年月、月日)和两种样式定制方案(底部弹窗式、内联嵌入式)。通过代码示例和优化技巧,帮助开发者解决官方`picker`组件在样式和交互上的限制,满足酒店预订、会员有效期选择等复杂业务场景需求。

weixin_30700977的博客 534

iOS解决NSUserDefaults存储失败问题

如果遇到NSUserDefaults存储失败问题,加上这行代码就OK了. 应该是它并不会立即存入沙盒,有延迟,如果立即打印可能或者取出,有时候就会取不出来 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize];// 强制立即存入沙盒

moses的博客 5115

URL是MVC的神经中枢:从路由设计到生产级实践

URL不仅是资源定位符,更是Web系统中控制流、数据流与用户体验流的核心契约。其本质是HTTP协议下路径、查询参数与请求体的职责划分机制,直接关联MVC架构中Controller的调度逻辑、Model的数据边界和View的渲染上下文。遵循RESTful语义可实现天然解耦,而路径参数、查询参数与请求体的合理使用,决定了缓存策略、SEO效果、安全防护与监控粒度。现代框架如Spring Boot、Express及Vue Router均围绕URL构建路由匹配引擎(如Trie树)与解析规范(如多层解码),使其成为可观

diedangxiang4092的博客 486

Xcode12打包后iOS11及以下系统NSUserDefaults数据会丢失(包括解决办法)

测试代码 [[NSUserDefaults standardUserDefaults] setObject:@"NOyyy" forKey:@"firstToyyy"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSString *text =[[NSUserDefaults standardUserDefaults] objectForKey:@"firstToyy...

qq_15509071的博客 1566

Spring MVC @RequestMapping 深度解析:从路径映射到生产避坑

@RequestMapping 是 Spring MVC 请求分发的核心机制,其本质是 DispatcherServlet 对 URL 路径、HTTP 方法、请求头与查询参数的多维匹配引擎。它基于类级与方法级映射的树状组合实现 API 版本管理与模块隔离,通过 headers 和 params 属性支持内容协商与请求分流,并与 @PathVariable、@RequestParam 共同构成参数绑定体系。该机制直接影响接口健壮性、可维护性与灰度发布能力,在金融、IoT、电商等高要求场景中尤为关键。本文聚焦真

Eric.Net的专栏 423

Elasticsearch、Solr、MeiliSearch与PostgreSQL全文搜索实战对比与避坑指南

全文搜索是处理海量文本数据、实现高效模糊匹配和相关性排序的核心技术,其底层依赖于倒排索引机制。该机制通过建立词条到文档的映射,相比传统数据库的LIKE查询,能实现毫秒级检索响应。这项技术为现代应用提供了从电商商品搜索、内容平台推荐到日志分析等场景的关键支撑。在实际工程实践中,开发者常面临在Elasticsearch、Solr、MeiliSearch及数据库内置方案间的选型困惑。本文聚焦于倒排索引与中文分词等核心热词,通过对比这四种主流方案在Docker环境下的配置、API集成及生产级优化策略,旨在为面临搜索

weixin_33885676的博客 420

NSUserDefaults 的坑知道吗?

这几天,恰好用到一个NSUserDefaults 保存少量数据,但是这个方法有点恶心,如果不留心很有可能存在坑。这个方法,简单方便,具体的优点我不说了,可以查阅苹果对NSUserDefaults的介绍。 先说下NSUserDefaults 的用法: iOS下可以使用NSUserDefault、NSKeyedArchiver、sqlite、CoreData几种常用的方式来存储数据,其中N

Dwyane_Coding 3886

多时间尺度源储荷微电网协调调度+日前日内实时+需求响应——附代码

为提高区域电网新能源消纳率,使电力系统运行成本最小,提高电力系统供电可靠性。提出考虑特性分布的储能电站接入的电网多时间尺度“源–储–荷”协调调度策略。综合储能电站、负荷侧各类需求响应资源的多时间尺度特性制定日前调度计划,并通过日内滚动与实时修正实现对预测数据更高精度的保证。以系统运行成本、弃风惩罚成本、失负荷惩罚成本为目标函数,建立多时间尺度调度模型。最后通过 MATLAB 平台调用商用软件包 CPLEX 完成混合整数规划优化,结果表明该调度策略可以达到系统运行成本最优,降低弃风率的效果。

不定时分享电力优化、神经网络、数学建模等技术等 6386

【已解决】NSUserDefaults偶尔/有时候保存数据会失败/失效

【已解决】NSUserDefaults偶尔/有时候保存数据会失败/失效 2012 年 9 月 12 日 下午 3:34 crifan 已有687人围观 我来说几句 【问题】 之前已经实现了通过NSUserDefaults去保存用户数据: 【已解决】iPhone/iOS中保存自定义对象(Custom Object/Custom Class...

张明炜 841

Protege新手入门:5分钟搞定本体建模基础(附实战案例)

本文为Protege本体建模新手提供了一份快速入门指南。通过构建一个关于“披萨”的实战案例,详细讲解了从环境准备、定义核心类(Classes)、建立对象属性(Object Properties)到设置数据属性(Data Properties)和创建个体的完整流程。文章旨在帮助读者绕过复杂理论,在5分钟内直观掌握本体建模的基础操作,快速建立知识图谱构建的信心。

weixin_28335283的博客 283

C语言——利用矩阵LU分解法求逆、行列式

本章介绍了LU分解法,以及如何利用LU分解法求逆、行列式,针对每个公式、原理、代码进行了详细介绍,希望可以给大家带来帮助。

王元笙 1万+

Settings.bundle的DefaultValue不起作用?(NSUserDefaults)

第一次需要用iPhone系统配置,发现Settings.bundle/Rool.plist中的DefaultValue不起作用。返回是nil。Google了下,NSUserDefaults确实没有提供现成的方法去让DefaultValue生效。解决办法如下: 在程序的- (BOOL)application:(UIApplication *)application didFinishLa...

weixin_30929295的博客 192

QST QMC5883L —— 经典磁传感器的生存指南与替代预案

本文聚焦于QST旗下经典三轴磁力计 QMC5883L,解析其技术渊源、核心特性及当前面临的停产风险。结合真实应用场景提供续命方案与选型建议,为依赖该芯片的开发团队争取过渡时间窗口期。文章包含实测数据对比、生命周期管理策略及潜在替代方案拆解。存续价值判断✔️ 现有产品设计无需大幅改动即可延续生命;❌ 新项目采用将面临更高的维护成本;⚠️ 建议在6个月内完成技术路线切换。#磁传感器 #嵌入式开发 #供应链管理 #QST #QMC5883L。

2501_93066786的博客 998

defaultvalue默认显示 请选择_请跟我一起来体验沃尔沃Carplay系统!

听闻IOS13的carplay系统有很大的改变,迫不及待拿出压箱底的iphone来试试。将iPhone与数据线连接(建议使用原装数据线),并把数据线插在中央扶手箱内带白色边框的USB接口上,出现这个提示,选择:是。连接成功,出现这个画面,我们可以看到一些常用的APP。我只安装了百度地图、QQ音乐和高德地图,Carplay的导航便捷性和QQ音乐的显示效果是我很喜欢的。QQ音乐内可选...

weixin_34539644的博客 1304

Open3D:Win10 + VS2017配置Open3D(C++、python)

一、下载源码 地址:https://github.com/intel-isl/Open3D 1.1 克隆源码【笔者的源码路径为D:\Open3D\Open3D】 1.2 切换版本【笔者的版本为0.8.0】 1.3 更新子模块【用于获取第三方库!很重要!】 二、CMake编译 2.1 设置路径 【source code: D:\Open3D\Open3D;build binaries: D:\Open3D】 【笔者设置CMAKE/CMAKE_INSTALL_PREFIX的路径为D:/Open.

累了就要打游戏 1万+

接入 deepseek 实现AI智能问诊

必须包含user角色,用于传递用户输入。system角色可选,用于设置对话背景。多轮对话需要将历史记录添加到messages中。

weixin_51326478的博客 6541

react native ios 系统输入法不能输入中文的解决办法

点这里,这篇文章写的不错,我就是记录一下 class MyTextInput extends Component { shouldComponentUpdate(nextProps){ return Platform.OS !== 'ios' || (this.props.value === nextProps.value && ...

weixin_30508309的博客 266

【OpenClaw从入门到精通】第12篇:OpenClaw 2026子代理实战全攻略:用ACP架构搭建多智能体协作网络(附完整代码)

本文聚焦OpenClaw 2026.3.2版本默认启用的ACP(Agent Communication Protocol)子代理机制,从核心概念、底层原理到企业级实操全流程拆解。先解析子代理的定义、ACP协议通信原理及主从代理分工逻辑,再提供环境准备的详细步骤(版本验证、配置调整、技能安装);随后通过三个递进式虚拟案例(客服分流、智能文档处理、企业级招聘全流程),提供可直接运行的完整代码、执行结果及技术要点解析;最后补充子代理管理运维、性能优化与避坑指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2382

Altair 数据转换(Data Transformations)完整指南:19 种 transform_* 方法与 transformed_data 原理

Altair 是一套声明式 Python 可视化库,其数据转换体系让开发者既可以在图表定义前用 pandas 预处理数据,也可以直接在图表规格(spec)内部通过顶层对象的 `transform_*` 方法描述转换逻辑,由 Vega-Lite/Vega 引擎在浏览器端或 Python 内核中执行。本文以 [doc/user_guide/transform/index.rst](https://li

gitblog_00215的博客 427

Linux系列:SecurtCRT中的密码如何找回

【代码】Linux系列:SecurtCRT中的密码如何找回。

NIO4444 1086

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LangGraph自定义工具进阶:用 Pydantic Schema 让 LLM 精准调用工具

本文介绍如何用 Pydantic Schema 定义复杂工具参数,让 LLM 在调用工具时更准确、更安全。通过 BaseModel、Field、Literal 和嵌套对象,可以把数量范围、枚举值、默认值、地址结构等约束前置到工具定义中。这样一方面能让 LLM 根据 Schema 生成更规范的参数,另一方面也能在工具执行前自动校验非法输入,避免脏数据进入业务系统。文章还结合订单创建、天气查询和数据库查询示例,讲解了 Schema 定义方式、运行效果、常见坑和生产级实践。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Session级个性化:轻量工程化实现用户实时感知

Session级个性化是一种聚焦单次会话(通常15分钟至2小时)的轻量级用户感知技术,其核心在于不依赖长期用户画像或复杂流式计算,而是通过分层上下文(静态/行为/意图)在边缘、网关与服务端协同完成毫秒级响应。它基于现代Web架构特性(如CDN边缘计算、API网关Lua脚本、前端sendBeacon),以低延迟、零持久化、强隐私合规为设计前提,显著提升电商转化率、SaaS留存与内容阅读时长。本文详解如何用Cloudflare Workers、Kong插件与Spring Boot,构建可落地的session-l

weixin_30540691的博客 409

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Unity多渠道多环境自动化打包:Jenkins流水线与配置模板实战

在软件工程领域,持续集成与持续交付(CI/CD)是提升团队协作效率和软件交付质量的核心实践。其基本原理是通过自动化工具链,将代码的构建、测试、打包和部署等环节串联起来,实现快速、可靠且可重复的发布流程。对于Unity移动游戏开发而言,这一技术的价值尤为突出,它能有效解决多平台(如iOS、Android)、多渠道(如应用宝、华为)和多环境(开发、测试、生产)带来的配置管理与打包复杂度问题。通过将可变因素(如渠道标识、API地址、版本号)参数化,并与构建脚本(如Jenkins Pipeline)和配置注入机制结

weixin_33834628的博客 497

你的Swagger文档够专业吗?用Knife4j这5个高级注解,让前后端联调效率翻倍

本文介绍了如何使用Knife4j的5个高级注解提升Swagger文档的专业性,包括@ApiImplicitParams构建清晰参数说明、@ApiModelProperty的example属性提供真实示例、接口分组与排序优化文档流、离线文档导出增强协作以及接口调试功能提升联调效率。这些技巧能显著减少前后端沟通成本,提升开发效率。

程涛 473

Swift-Sharing扩展库生态:SharingGRDB、SharingCloud等配套工具全解析

Swift-Sharing是一个功能强大的通用数据持久化与共享解决方案,通过极少的代码即可实现复杂的数据管理需求。本文将深入解析其生态系统中的核心配套工具,包括SharingGRDB、SharingCloud等,帮助开发者快速掌握这些工具的使用方法与优势。 ## 什么是Swift-Sharing生态系统? Swift-Sharing生态系统由主库和多个社区支持的扩展库组成,旨在为Swift开发

gitblog_00348的博客 1086
上一篇: iPhone3开发基础教程中部分有用代码片段(1)
下一篇: (转)为什么大家觉得Symbian开发比较难?
xinlanzero
博客等级 码龄25年 10粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值