我有一个plist文件,其中包含一系列字典.这是其中之一:
Fred字典
名称Fred
isMale [已选中框]
所以现在我用我从plist文件中读取的字典初始化我的Person对象:
-(id) initWithDictionary: (NSDictionary *) dictionary {
if (self = [super init])
self.name = [dictionary valueForKey: @"Name"];
self.isMale = ????
}
Run Code Online (Sandbox Code Playgroud)
如何完成上面的代码,以便在plist文件中选中复选框时将self.isMale设置为YES,如果不是则选择NO.如果字典中没有键isMale,则最好也设置为NO.
有没有人知道如何使用默认值从命令行修改Plist文件?目前URL types阵列下有两个词典; 我需要添加另一个.

我尝试的每个命令都要么替换整个字典,要么创建一个新的数组URL types而不是编辑它.有关如何在默认设置(控制台Mac应用程序)而不是 PlistBuddy中完成此操作的任何想法?
我有一个奇怪的问题与Tiny Wings的错误修正.在我的游戏中我使用的东西如下:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setFloat:musicVolume forKey:@"musicVolume"];
Run Code Online (Sandbox Code Playgroud)
用于保存一些首选项和高分表.在游戏结束时,当游戏画面出现时,游戏将高分保存到standardUserDefaults.它运行良好,直到游戏显示如下的UIAlertView:
UIAlertView *alert = [[UIAlertView alloc] init];
[alert setTitle:@"Get ready!"];
[alert setDelegate:self];
[alert addButtonWithTitle:@"Ok"];
[alert show];
[alert release];
Run Code Online (Sandbox Code Playgroud)
之后,AlertView消失每次游戏保存财产以后一会儿游戏滞后(在几秒钟一些设备)的standardUserDefaults.在游戏使用UITextField输入玩家名称后也会发生这种情况.在使用两个UIKit Elements中的一个之前游戏中没有任何延迟,但在使用它们之后游戏会延迟直到我重新启动应用程序.我用性能工具分析了这个问题,"I/O活动"仪器显示有数百个"开放 - 读取 - 关闭"访问
/System/Library/Frameworks/UIKit.framework/InputModeProperties.plist
Run Code Online (Sandbox Code Playgroud)
这导致了滞后.
我完全不知道该怎么做.有任何想法吗?
编辑:
苹果开发者论坛http://devforums.apple.com/message/424374#424374中有一个帖子,其中有人有同等的问题,似乎它只出现在iOS 4.3中.我已经测试了它,而且仅在我的4.3设备上发生了滞后(不是在3.1 iPod Touch和4.2 iPad上).
嗨我正在尝试从餐馆对象创建一个fourates列表,我的应用程序有一个不同的餐厅列表,我希望能够为用户添加有利的餐厅,这个代码不起作用
- (IBAction)toggleFav:(id)sender {
Restaurant *resto = [self restaure];
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:resto.price forKey:@"restoPrice"];
[dic setObject:resto.restaurantId forKey:@"restaurantId"];
[dic setObject:resto.restoAbout forKey:@"restoAbout"];
[dic setObject:resto.restoAddress forKey:@"restoAddress"];
[dic setObject:resto.restoBeverages forKey:@"restoBeverages"];
[dic setObject:resto.restoCategory forKey:@"restoCategory"];
[dic setObject:resto.restoEmail forKey:@"restoEmail"];
[dic setObject:resto.restoLogo forKey:@"restoLogo"];
[dic setObject:resto.restoName forKey:@"restoName"];
[dic setObject:resto.restoPhone forKey:@"restoPhone"];
[dic setObject:resto.restoCity forKey:@"restoCity"];
NSArray *dicArray = [dic allKeys];
if([sender isSelected]){
//...
[sender setSelected:NO];
NSMutableArray *array = [[[NSUserDefaults standardUserDefaults] objectForKey:@"restoName"] mutableCopy];
[array removeObject:dicArray];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"restoName"];
} else {
//...
[sender setSelected:YES];
NSMutableArray *array = …Run Code Online (Sandbox Code Playgroud) 我想以通用方式将对象属性复制到另一个对象(如果目标对象上存在属性,我将其从源对象复制).
我的代码使用ExpandoMetaClass工作正常,但我不喜欢这个解决方案.有没有其他方法可以做到这一点?
class User {
String name = 'Arturo'
String city = 'Madrid'
Integer age = 27
}
class AdminUser {
String name
String city
Integer age
}
def copyProperties(source, target) {
target.properties.each { key, value ->
if (source.metaClass.hasProperty(source, key) && key != 'class' && key != 'metaClass') {
target.setProperty(key, source.metaClass.getProperty(source, key))
}
}
}
def (user, adminUser) = [new User(), new AdminUser()]
assert adminUser.name == null
assert adminUser.city == null
assert adminUser.age == null
copyProperties(user, …Run Code Online (Sandbox Code Playgroud) 请帮我解决这个内存泄漏问题.在泄漏工具它示出了泄漏:NSCFString(32个字节)在库Foundation负责框架:NSPropertyListSerialization.我发布错误但仍然是泄漏.我错过了什么?非常感谢!
NSPropertyListFormat format;
NSString *anError = nil;
id plist;
plist = [NSPropertyListSerialization propertyListFromData:rawCourseArray mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&anError];
if (!plist){
[anError release];
}
NSArray *entries = (NSArray *)plist;
for (NSDictionary *entry in entries)
{
// DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud) 我已经在App Store中提供了一个iPhone应用程序(版本1.0),并准备提交更新版本(版本1.1).如何测试新升级以确保先前版本上的当前sqlite数据库和属性列表文件不会被删除/覆盖等?新版本假定sqlite数据库和属性列表中的旧数据仍然存在.
或者更好的是,是否有一个资源可以用来指导我在开发应用程序更新时要注意什么?
我不喜欢Elisp中的plists是如何缩进的.
;; current desired Python (for comparison)
;; '(a 1 '(a 1 {'a': 1,
;; b 2 b 2 'b': 2,
;; c 3) c 3) 'c': 3}
Run Code Online (Sandbox Code Playgroud)
试过M-x emacs-version24.3.1,跑了emacs -Q,输入了plist并按下了C-x h C-M-\.
当它不是列表时,这个缩进是有意义的:
(mapcar (lambda (x) (x + 1))
'(1 2 3 4))
Run Code Online (Sandbox Code Playgroud)
如何更改格式设置,以便只有plists(或者,如果不可能,所有引用列表)具有所需的矩形缩进,但其他所有内容的缩进保持不变?我需要将其存储在本地.el文件中,这样当我编辑此文件时,它会根据需要缩进,但此行为不会在其他任何地方结束.
在Xcode中,您可以通过选择"快速打开"文件File/Open Quickly.当我输入plist文件的文件名时,该文件将作为"Property List"打开.但我经常要将文件打开为"源代码".如何快速打开属性列表文件作为源代码?
我有一个plist文件,这是一个字典数组.每个字典包含一组字符串.每个字典代表一个名人.
我想要做的是在应用程序首次启动时使用此plist的内容填充Core Data,之后我想以某种方式检查核心数据是否存在我的数据,如果有数据,则从那里加载,否则再次从plist文件加载初始数据.
我知道可以从plist中填充核心数据,但是我建议一个可行的解决方案吗?还是有更好的方法?
插口
在我的应用程序中,我试图序列化服务器响应字典并将其写入文件系统.但是我收到一些回复的错误"属性列表格式无效".原因是服务器响应中的CFNull对象.现在,服务器响应将继续改变,所以我没有明确的方法来删除CFNull对象().以下是我的代码:
NSString *anError = nil;
NSData *aData = [NSPropertyListSerialization dataFromPropertyList:iFile format:NSPropertyListXMLFormat_v1_0 errorDescription:&anError];
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?如何一次性从服务器响应中删除所有CFNull对象?
以下代码:
[[NSUserDefaults standardUserDefaults] setObject:photoIdToPath forKey:@"photo_id_to_path"];
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
Attempt to set a non-property-list object {
417675729 = "/Users/k06a/Library/Application Support/iPhone Simulator/7.1/Applications/21163736-DF6F-4E79-8196-6A966C81ED1B/Documents/417675729";
} as an NSUserDefaults value for key photo_id_to_path
Run Code Online (Sandbox Code Playgroud)
这是photoIdToPath来自Xcode调试控制台的字典内容分析:
(lldb) po photoIdToPath
{
417675729 = "/Users/k06a/Library/Application Support/iPhone Simulator/7.1/Applications/21163736-DF6F-4E79-8196-6A966C81ED1B/Documents/417675729";
}
(lldb) po [[[photoIdToPath allKeys] lastObject] class]
__NSCFNumber
(lldb) po [[[photoIdToPath allValues] lastObject] class]
NSPathStore2
Run Code Online (Sandbox Code Playgroud)
那么NSPathStore2是子类NSString,为什么这个字典不是属性列表?
更新:
value参数只能是属性列表对象:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary.对于NSArray和NSDictionary对象,其内容必须是属性列表对象.请参阅"属性列表编程指南"中的"什么是属性列表?".
引自 (1975) Maclisp 参考手册:“每个原子符号都与一个属性列表相关联,可以使用plist函数检索它。”
Maclisp 属性列表是“指标/值”对的列表。在 Maclisp 中,
(get x y)
Run Code Online (Sandbox Code Playgroud)
得到 x 的 y 属性。
(putprop x 'banana y)
Run Code Online (Sandbox Code Playgroud)
将 x 的 y 属性设置为香蕉。
我的任务是将许多旧的 Maclisp 代码转换为 Clojure。我是 Clojure 的新手,但随着这个项目的展开,我不会太久。在我跑去自己写一些东西之前,我想知道 Clojure 是否已经有“属性列表”功能?或者接近的东西?
如果没有,组装的 Clojure 众神会让我做什么来实现这样的功能?请记住,Maclisp 中的每个原子符号都可以但不必具有属性列表。谢谢你。
property-list ×13
objective-c ×7
ios ×4
iphone ×3
nsdictionary ×2
boolean ×1
class ×1
clojure ×1
cocoa ×1
cocoa-touch ×1
console ×1
core-data ×1
elisp ×1
emacs ×1
groovy ×1
indentation ×1
maclisp ×1
macos ×1
memory-leaks ×1
nsdata ×1
plist ×1
properties ×1
shell ×1
sqlite ×1
uikit ×1
updating ×1
xcode ×1