如果我们的API只需要对象中的2个属性,并且iPhone应用程序不要求它们实例化对象,则当对象在参数NSDicitionary中使用时,应用程序将崩溃.我被告知NSDictionary不会让你分配nil值,因为当它达到nil时它会认为它已经完成了.objective-c是否有办法将对象非零属性吐出到NSDictionary中?
例:
[Drunk alloc] init];
drunk.started_drinking = [NSDate date];
drunk.stopped_drinking (we don't set this because he is still a drunk)
drunk.fat = YES;
drunk.dumb = YES;
parameters:@{
@"auth_token" :token,
@"name" : drunk.name, @"date_started" : drunk.started_drinking,
@"date_stopped" : drunk.stopped_drinking,
@"prescribing_doctor" : drunk.fat,
@"pharmacy" : drunk.dumb
}
Run Code Online (Sandbox Code Playgroud)
当它到达stopped_drinking属性时会崩溃.有关如何处理这个的任何建议?
嗨,我正在学习Swift,我想从JSON Api中提取数据,我的Swift代码看起来像这样.具体来说,我需要提取每个键及其值,(例如:打印标题值,封面等).
//Json request
var error: NSError?
var raw = NSString.stringWithString("http://example.com/MovieAPI/api/v1/movies/")
var api_url = NSURL.URLWithString(raw)
let jsonData: NSData = NSData.dataWithContentsOfURL(api_url, options: nil, error: &error)
let result = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error)
as NSDictionary
for val in result {
for (var i=0; i < val.value.count; i++){
//println(val.value.valueAtIndex(3)) Not Working
}
}
Run Code Online (Sandbox Code Playgroud)
而我的JSON的结构是
{
data: [
{
id: 2,
title: "Hunger Games",
cover: "http://example.com",
genre: 2
}
]
}
Run Code Online (Sandbox Code Playgroud)
救命!
我正在学习斯威夫特,我可以看到Dictionary它.
但是有很多NSDictionary与Swift 一起使用的例子.
这两者有什么区别?
我想在Swift中使用带有索引的数组,就像PHP中的数组一样.
哪一个更好用?
我调用addImageToQueue后,我的应用程序崩溃了.我添加了initWithObjects:forKeys:count:但它没有帮助我.
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[NSDictionary initWithObjects:forKeys:count:]:
method only defined for abstract class.
Define -[DictionaryWithTag initWithObjects:forKeys:count:]!'
Run Code Online (Sandbox Code Playgroud)
我的代码
- (void)addImageToQueue:(NSDictionary *)dict
{
DictionaryWithTag *dictTag = [DictionaryWithTag dictionaryWithDictionary:dict];
}
@interface DictionaryWithTag : NSDictionary
@property (nonatomic, assign) int tag;
- (id)initWithObjects:(id *)objects forKeys:(id *)keys count:(NSUInteger)count;
@end
@implementation DictionaryWithTag
@synthesize tag;
- (id)initWithObjects:(id *)objects forKeys:(id *)keys count:(NSUInteger)count
{
return [super initWithObjects:objects forKeys:keys count:count];
}
@end
Run Code Online (Sandbox Code Playgroud) 我正在尝试向我的服务器发送一个json文件.json格式应该看起来像这样:
{
"eventData": {
"eventDate": "Jun 13, 2012 12:00:00 AM",
"eventLocation": {
"latitude": 43.93838383,
"longitude": -3.46
},
"text": "hjhj",
"imageData": "raw data",
"imageFormat": "JPEG",
"expirationTime": 1339538400000
},
"type": "ELDIARIOMONTANES",
"title": "accIDENTE"
}
Run Code Online (Sandbox Code Playgroud)
我硬编码了这个并且像这样工作:
NSString *jsonString = @"{\"eventData\":{\"eventDate\":\"Jun 13, 2012 12:00:00 AM\",\"eventLocation\":{\"latitude\":43.93838383,\"longitude\":-3.46},\"text\":\"hkhkjh\",\"imageData\":\"\",\"imageFormat\":\"JPEG\",\"expirationTime\":1339538400000},\"type\":\"Culture\",\"title\":\"accIDENTE\"}";
Run Code Online (Sandbox Code Playgroud)
所以我想做同样的事情,但使用NSDictionary原因当然我不想硬编码我的所有数据.所以我正在创建一个像这样的NSDictionary:
NSMutableDictionary *eventLocation = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"43.93838383",@"latitude",@"-3.46", @"longitude" , nil];
NSMutableDictionary *eventData = [NSMutableDictionary dictionaryWithObjectsAndKeys:eventLocation,@"eventLocation", nil];
[eventData setObject:@"Jun 13, 2012 12:00:00 AM" forKey:@"eventDate"];
[eventData setObject:@"hjhj" forKey:@"text"];
[eventData setObject:@"raw data" forKey:@"imageData"];
[eventData setObject:@"JPEG" forKey:@"imageFormat"];
[eventData setObject:@"1339538400000" forKey:@"expirationTime"];
NSMutableDictionary *finalDictionary = [NSMutableDictionary …Run Code Online (Sandbox Code Playgroud) 在NS(Mutable)词典中用作键的所有对象必须支持NSCopying协议,并且这些对象在字典中使用时会被复制.
我经常想要使用较重的物体作为键,只需将一个物体映射到另一个物体.当我这样做时,我真正的意思是:
[dictionary setObject:someObject forKey:[NSValue valueWithPointer:keyObject]];
Run Code Online (Sandbox Code Playgroud)
("当我回来再次交给你这个相同的关键对象实例时,给我相同的值.")
...这正是我最终做的有时候绕过这个设计.(是的,我知道桌面Cocoa中的NSMapTable;但是iPhone不支持这个.)
但我真正得到的是为什么首先复制密钥是必要的或可取的.它是如何购买实现或调用者的?
我目前正在iOS设备上保存一个NSDictionary文件.但是,NSDictionary文件是可读的XML.我不希望人们能够进入并阅读内容,因此我需要能够在写入时加密文件并在再次加载时解密.
我目前正在保存这样的文件:
NSFileManager* fileManager = [NSFileManager defaultManager];
if (!fileManager)
{
NSLog(@"Failed to get file manager to save.");
return;
}
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* filePath = [documentsDirectory stringByAppendingPathComponent:@"save.dic"];
[m_dictionary writeToFile:filePath atomically:YES];
Run Code Online (Sandbox Code Playgroud)
我正在加载这样的字典:
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* filePath = [documentsDirectory stringByAppendingPathComponent:@"save.dic"];
m_dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)
谁能告诉我一个加密\解密这个的好方法?
干杯,里奇
我有一个非常有趣的问题.
在我的一个类中,我声明了一个非常简单的实例方法 - (NSDictionary)字典; 这是以这种方式实现的:
- (NSDictionary *)dictionary {
return [NSDictionary dictionaryWithObjectsAndKeys:
self.userID, @"id",
self.userName, @"name",
self.userSurname, @"sName",
self.userNickname, @"nName",
self.userPassword, @"pwd",
[NSNumber numberWithDouble:[self.userBirthday timeIntervalSince1970] * 1000], @"birthday",
self.userSex, @"sex",
self.userEmail, @"email",
self.userLanguage, @"locale",
[NSNumber numberWithLongLong:self.userCoin], @"coin",
self.userRate, @"rate",
[NSNumber numberWithDouble:self.userCoordinate.latitude], @"lat",
[NSNumber numberWithDouble:self.userCoordinate.longitude], @"lon",
self.userPlaces, @"userPlaces",
nil];
}
Run Code Online (Sandbox Code Playgroud)
声明了这个方法,我的返回字典中没有@"userPlaces"键(self.userPlace显然是有价值的并且充满了对象).
所以我改变了一下这样的方法:
- (NSDictionary *)dictionary {
NSMutableDictionary *toReturn = [NSMutableDictionary dictionary];
[toReturn setValue:self.userID forKey:@"id"];
[toReturn setValue:self.userName forKey:@"name"];
[toReturn setValue:self.userSurname forKey:@"sName"];
[toReturn setValue:self.userNickname forKey:@"nName"];
[toReturn setValue:self.userPassword forKey:@"pwd"];
[toReturn setValue:[NSNumber numberWithDouble:[self.userBirthday timeIntervalSince1970] * …Run Code Online (Sandbox Code Playgroud) 我将json解析结果保存在以下dictionary内容中:
{
"statusCode":"200",
"body":[
{
"status":"success",
"remarks":null
}
],
"data":[
"abcd":[
{
"category":"a",
"title":"b",
"id":"24"
},
{
"category":"c",
"title":"crd",
"id":"65"
},
{
"category":"ds",
"title":"sd",
"id":"18"
}
]
},
{
"efgh":[
{
"category":"ds",
"title":"sd",
"id":"18"
},
{
"category":"sd",
"title":"sd",
"id":"1"
}
]
},
{
"ijkl":[
{
"category":"ds",
"title":"sd",
"id":"18"
},
{
"category":"sd",
"title":"sd",
"id":"1"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
key @"data"的数据可以通过使用保存到数组中
NSMutableArray *getdata=[[NSMutableArray alloc]init];
getcat=[results objectForKey:@"data"];
Run Code Online (Sandbox Code Playgroud)
现在我应该为values(category, title, id)第一个索引内部做些什么,即"abcd".
如果有人有任何知识,请看看.
谢谢大家.
我试图显示字典格式的数据.下面,有三次尝试.首次尝试,输出顺序完全改变.第二次尝试,输出顺序与输入相同.但是,在第三次尝试中,我将变量声明为NSDictionary.我收到的确切输出.为什么这会改变字典?请指导我.我搜索了Swift的字典标签.但我找不到.
//First Attempt
var dict : Dictionary = ["name1" : "Loy", "name2" : "Roy"]
println(dict)
//output:
[name2: Roy, name1: Loy]
//Second Attempt
var dict : Dictionary = ["name2" : "Loy", "name1" : "Roy"]
println(dict)
//output:
[name2: Loy, name1: Roy]
-----------------------------------------------------------
//Third Attempt With NSDictionary
var dict : NSDictionary = ["name1" : "Loy", "name2" : "Roy"]
println(dict)
//output:
{
name1 = Loy;
name2 = Roy;
}
Run Code Online (Sandbox Code Playgroud)
另一个问题:我用游戏场进行验证.我的屏幕截图如下:

在这里,在NSDictionary中,我首先给了name5,但是在右边name2显示,然后,在println中,它以升序显示.为什么会这样?

在这里,在字典中,我给了name5作为第一个,但是在右边name2正在显示,然后,在println中,它正在显示它是如何在Dictionary行上拍摄的.为什么会这样?
nsdictionary ×10
ios ×6
swift ×3
iphone ×2
json ×2
objective-c ×2
arrays ×1
cocoa ×1
crash ×1
dictionary ×1
encryption ×1
format ×1
foundation ×1
uikit ×1