【问题标题】:mutable array value getting empty可变数组值变空
【发布时间】:2015-02-28 07:07:59
【问题描述】:

我有一个包含日期的数组。这是我的数组。

"2015-03-01",
"2015-03-04",
"2015-03-05",
"2015-03-06",
"2015-03-07",
"2015-03-08",
"2015-03-14",
"2015-03-15"

根据这个日期列出值。我的编码是

NSArray * datevalue = [tempArr valueForKey:@"match_formatted_date"];
                NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
                NSArray *descriptors = [NSArray arrayWithObject: descriptor];
                NSArray *reverseOrder = [datevalue sortedArrayUsingDescriptors:descriptors];

 NSPredicate *findFutureDates = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind){
NSDateFormatter *df = [[NSDateFormatter alloc]init];
                    [df setDateFormat:@"yyyy-MM-dd"];
                    [df setTimeZone:[NSTimeZone systemTimeZone]];
                    NSDate *dd = [df dateFromString:(NSString *)obj ];
                    return ([[NSDate date] compare:dd] == NSOrderedAscending);
    }];

NSArray * arrFutureDates = [reverseOrder filteredArrayUsingPredicate: findFutureDates];
                NSLog(@"arrFutureDates:%@",arrFutureDates);

for (id item in arrFutureDates)
{
if (![dataArr containsObject:item])
                        [dataArr addObject:item];
}

 [dataArr sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

for  (int i= 0; i<[dataArr count]-1; i++)  {

                    for (id item in tempArr)
{
if([@"Mexico: Copa Mexico - Clausura" isEqualToString:[item valueForKey:@"league_name"]]
                           ||[@"Mexico: Liga De Ascenso - Clausura" isEqualToString:[item valueForKey:@"league_name"]]
                           ||[@"Mexico: Primera Division - Clausura" isEqualToString:[item valueForKey:@"league_name"]])

                           if([[dataArr objectAtIndex:i]isEqualToString:[item valueForKey:@"match_formatted_date"]])
{
NSMutableDictionary *tempDic =[[NSMutableDictionary alloc]init];
                                [tempDic setValue: [item valueForKey:@"match_formatted_date"]  forKey:@"match_formatted_date"];
                                [tempDic setValue: [item valueForKey:@"league_name"]  forKey:@"league_name"];



if (![titleheader containsObject:tempDic])

{
[titleheader addObject:tempDic];
}}}}

我的问题是:在标题标题空值即将到来。如果我犯了错误,任何人都可以帮助我。

【问题讨论】:

  • 你在 -(void)viewdidload 方法中分配数组?
  • 是的,它在 viewdidload 中
  • 好的,然后检查 RJV Kumar 的答案。
  • 在这里也添加你的 viewDidLoad 方法体

标签: ios objective-c iphone for-loop nsarray


【解决方案1】:

检查您的代码,您没有在任何地方初始化标题标题。在这种情况下,它将仅为零。 在检查条件之前,初始化并为 titleheader 分配一些值。 否则我不知道你错过了粘贴代码。

【讨论】:

  • 我已将标题标题初始化为 .h 文件中的可变数组,我错过了粘贴代码
【解决方案2】:

除了不可读的格式之外,您的代码中几乎没有问题,这可能会导致您的问题:

NSArray* datevalue = [tempArr valueForKey:@"match_formatted_date"];

顾名思义,tempArrNSArray,但是您以NSDictionary 的身份访问它。方法-valueForKey:-objectForKey: 之间存在差异。前者是KVC相关的NSObject方法,后者是访问存储对象的NSDictionary方法。它们经常被混淆,因为调用NSDictionary 它们的行为方式相同。

for  (int i= 0; i<[dataArr count]-1; i++)  {

这个for 循环跳过了dataArr 中的最后一个对象,我认为这不是故意的。这可以通过i &lt; dataArr.counti &lt;= dataArr.count-1 修复。

另一个问题 - 与问题无关,但有机会学习:

NSMutableDictionary *tempDic =[[NSMutableDictionary alloc]init];
                            [tempDic setValue: [item valueForKey:@"match_formatted_date"]  forKey:@"match_formatted_date"];
                            [tempDic setValue: [item valueForKey:@"league_name"]  forKey:@"league_name"];


if (![titleheader containsObject:tempDic])

容器中的对象作为引用存储和比较(默认情况下),因此-containsObject 将始终返回NO - 即使有另一个NSDictionary 具有相同的键值对。

【讨论】:

  • 谢谢兄弟,我会纠正我的错误。我的标题仍然是空值
  • 你能发布你的dataArr,tempArr和titleheader是如何初始化的吗?
  • dataarr 是上面的日期数组,temparr 太大了全部都初始化了,我现在该怎么办
  • stackoverflow.com/questions/28739599/…(你能帮我解答这个问题吗)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2011-09-06
相关资源
最近更新 更多