我有一个字典词典,它以JSON格式返回给我
{
"neverstart": {
"color": 0,
"count": 0,
"uid": 32387,
"id": 73129,
"name": "neverstart"
},
"dev": {
"color": 0,
"count": 1,
"uid": 32387,
"id": 72778,
"name": "dev"
},
"iphone": {
"color": 0,
"count": 1,
"uid": 32387,
"id": 72777,
"name": "iphone"
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个NSArray,其中包含项目所需的id.例如[72777,73129]
我需要做的是获取数组中项目的id => name字典.我知道这可以通过迭代数组,然后循环遍历Dictionary中的所有值并检查值,但似乎应该有一个不那么冗长的方法来做到这一点.
请原谅我的无知,因为我只想找到解决iPhone SDK的方法并学习Objective C和Cocoa.
我一直在思考这个问题已有一段时间了,但我还是无法得到一个简洁有效的解决方案.
问题:
我有一个配方列表,它是一个NSArray,每个配方对象包含NSSet对象的成分.数据是一对多的关系,来自coredata.现在还有另一个列表NSArray,其中包含特定人员当前拥有的项目(成分).
现在我必须以某种方式比较当前用户具有食谱中的成分的项目,并在表格视图中推荐用户食谱,其中包括所有项目,缺少1个项目,缺少两个项目和缺少三个项目等部分.
你们怎么认为我应该解决这个问题.我尝试了一些东西但最终每次都失去了更多.
任何帮助/指针将受到高度赞赏
我有一个包含许多部分的表视图,这些部分的标题只是AZ和#就像在iPhone地址簿App中一样.我已经实现了sectionIndexTitlesForTableView来快速移动到特定的字母,基本上只返回一个字母A - Z和#的数组.
如果我的列表总是包含字母表中每个字母的一个项目,但它不会,这会使部分索引标题搞砸了,因为如果第3个部分是D(即如果有的话),在列表中点击C可能会转到D C)部分没有任何内容.
我知道我可以在sectionIndexTitlesForTableView中返回数组,只有字母是部分,但这看起来有点奇怪,与iPhone地址簿应用程序的功能不同.
我怎么能纠正这个?
使用一组UIViews和UIImageViews([[[UIApplication sharedApplication] window]子视图]).我只需要删除UIImageView类型的最高索引的对象.
可以说我有一个学生课程如下:
class Student {
NSNumber *id;
NSString *lastName;
NSString *firstName;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我从Web服务中获取所有学生的记录时,我有一个NSArray,可以存储所有学生的记录.在某些时候,我需要查找数组,根据名字查找特定学生的记录.
假设我创建了一个名为studentsFirstNameDictionary的字典.
因此,在向学生阵列添加对象时,我可以这样做
Student objStudent = [[Student alloc] init];
objStudent.Id = someId;
objStudent.firstName = someName;
objStudent.lastName = someLastName;
[studentsDictionary setValue:iterationCounter forKey:objStudent.firstName];
[students addObject:objStudent];
Run Code Online (Sandbox Code Playgroud)
我想知道创建这个字典是否是一个好主意,以加快查找速度,如下所示.另外请假设在任何情况下都需要数组,并且为了快速查找,我还创建了其他字典,并将姓氏和id作为键和索引存储为上述值:
-(Student*)getStudentByFirstName:(NSString *)firstName {
int idxOfStudent = [ studentsDictionary valueForKey:firstName];
return [students idxOfStudent];
}
Run Code Online (Sandbox Code Playgroud)
您是否认为这种方法比通过迭代学生数组并比较名字并返回匹配的学生记录更好?
我总是需要学生数组,因为我需要用该数组填充表视图.我想知道在填充数组时创建多个词典是否明智,以便我可以通过拳头名,姓或Id更快地查找学生记录?
PS:为了简单起见,考虑到所有的学生都有独特的姓,名和ID,因此不会有任何问题,同时创造字典存储姓氏,名字或ID作为值.
我在xib中有uiButtons.我为所有人设置了恢复标识.我需要打印这些恢复ID列表.为此,我在viewDidload中调用以下代码:
-(void)loadViewFromNIB:(NSString *)nibName owner:(id)owner
{
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil];
NSArray *subviews = [[objects objectAtIndex:0]subviews];
for (id key in subviews) {
[key addTarget:self
action:@selector(touchB:)
forControlEvents:UIControlEventTouchDown];
[key addTarget:self
action:@selector(touchE:)
forControlEvents:UIControlEventTouchUpInside];
NSString *ident = self.restorationIdentifier;
NSLog(@"%@",ident);
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
2013-02-24 13:05:38.817 fozbKEY[3939:11603] (null)
2013-02-24 13:05:38.822 fozbKEY[3939:11603] (null)
2013-02-24 13:05:38.824 fozbKEY[3939:11603] (null)
Run Code Online (Sandbox Code Playgroud)
这只是重复了一堆.我做错了什么?我如何解决它?谢谢!
我试图从我的排序数组中删除任何重复...我想我可以使用我的另一个问题的一个例子,但事实证明甚至没有接近工作.
这是一个非常糟糕的尝试,但它是我能弄清楚如何在NSMutableArray中比较单个项目(NSDictionary)的两个元素的唯一方法.
这是我的代码示例
我目前有一个排序数组
NSArray *duplicatesRemovedArray = [sortedArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSDictionary *dictA = a;
NSDictionary *dictB = b;
NSString *startYear1 = dictA[kStartYear];
NSString *finishYear1 = dictA[kFinishYear];
NSString *allYear1 = [NSString stringWithFormat:@"%@%@",startYear1, finishYear1];
NSString *startYear2 = dictB[kStartYear];
NSString *finishYear2 = dictB[kFinishYear];
NSString *allYear2 = [NSString stringWithFormat:@"%@%@",startYear2, finishYear2];
return [allYear1 compare:allYear2];
}];
Run Code Online (Sandbox Code Playgroud)
如果有人对如何创建我所追求的独特项目的NSArray有任何想法,如果你能给我任何建议,代码示例将非常感激
更新:我应该指出我的NSDictionary中有另一个元素ID ...
所以我不能只比较你列出的例子中的对象......这对我来说是一种疏忽.因此,有效的对象看起来像这样
ID: 1234
STARTYEAR: 1999
FINISHYEAR: 2000
Run Code Online (Sandbox Code Playgroud)
所以我需要一些帮助删除对象,其中StartYear和FinishYear匹配其他对象的开始和结束年份.
我有这个代码:
NSDictionary *jsonGuardado = [self dictionaryFromJson:JSON];
NSLog(@"HOLA %@",jsonGuardado);
NSMutableArray *arrayCodigos = [jsonGuardado objectForKey:@"code"];
codigos = arrayCodigos;
Run Code Online (Sandbox Code Playgroud)
(Codigos是一个NSMutableArray)
NSLOG归还:
HOLA (
{
code = 22051310;
},
{
code = 22051311;
},
{
code = 22051312;
},
{
code = 22051313;
}
)
Run Code Online (Sandbox Code Playgroud)
但就在此之后,消息错误说:
-[JKArray objectForKey:]: unrecognized selector sent to instance
我在谷歌和这里搜索这个错误,我发现的所有问题都没有帮助我.
我正在使用JSONKitfor make使用dictionaryFromJson方法.
我有一个不同的nsmutablearray的nsarray叫做:playerSkillsByLevelSnapshots.在下面的代码的开头,数组包含6个对象.
NSArray *anArray2 = [playerSkillsByLevelSnapshots objectAtIndex:index];
playerSkills = [NSMutableArray arrayWithArray:anArray2];
[playerSkillsByLevelSnapshots removeObject:anArray2];
Run Code Online (Sandbox Code Playgroud)
当我逐步浏览上面的最后一行时,该数组包含0个对象.任何人都可以向我解释为什么会这样.请注意,数组中没有重复的条目.
所以我有JSON数据格式化为字典列表,我把它存储为NSArray对象,但我不确定如何将每个条目转换为字典对象当它当前是AnyObject
AnyObject数据已经格式化为JSON字典
这是我用来创建数组的代码
func startConnection(){
let urlPath: String = "http://api.mtgdb.info/search/omni"
var url: NSURL = NSURL(string: urlPath)!
var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()
}
func connection(connection: NSURLConnection!, didReceiveData data: NSData!){
self.data.appendData(data)
}
func connectionDidFinishLoading(connection: NSURLConnection!){
var err: NSError
var jsonResult: NSArray = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSArray
for var i = 0; i<jsonResult.count; ++i{
...
}
}
Run Code Online (Sandbox Code Playgroud) nsarray ×10
objective-c ×7
ios ×6
nsdictionary ×4
json ×3
arrays ×1
cocoa ×1
cocoa-touch ×1
comparison ×1
core-data ×1
iphone ×1
nslog ×1
nsset ×1
null ×1
subviews ×1
swift ×1
uitableview ×1