【问题标题】:Looping though NSArray循环遍历 NSArray
【发布时间】:2015-11-18 10:50:07
【问题描述】:

我在遍历 NSArray 时遇到问题。

这是我的代码

 db = [[BrowserController currentBrowser] databaseOutline];
        int rowNumber = [db numberOfRows];
        int i = 0;
        if (rowNumber > 0 && i <= rowNumber)
        {
            while ([resultSet next])
            {
                NSDictionary *infos = [resultSet resultDictionary];
                for (NSString *field in fields)
                {
                    NSLog(@"field = %@", field);
                    NSString *zID = nil;
                    if ([field isEqualToString:@"ZSTUDY.ZID"])
                    {
                        zID = [infos objectForKey:[self.fieldsName objectForKey:field]];
                    }
                    NSManagedObject *curObj = [db itemAtRow:i++];
                    NSLog(@"i = %d", i);
                    NSString *browserID = [curObj valueForKey:@"StudyID"];
                    //NSString *key = [[[db sortDescriptors] objectAtIndex:0]key];
                    //                        NSLog(@"key = %@", key);
                    if ([zID isEqualToString:browserID])
                    {
                        NSLog(@"They are the same");
                        if ([field isEqualToString:@"ZSERIES.ZDATE"] || [field isEqualToString:@"ZSERIES.ZDATEADDED"] || [field isEqualToString:@"ZSERIES.ZDATEOPENED"]) {
                            NSNumber *number = [infos objectForKey:[self.fieldsName objectForKey:field]];
                            if (number && ![number isKindOfClass:[NSNull class]])
                            {
                                int result = [number intValue] + 11324*(60*60*24);
                                NSDate *date = [NSDate dateWithTimeIntervalSince1970:result];
                                [csvWriter writeField:date];
                            }
                            else
                            {
                                [csvWriter writeField:@""];
                            }
                        }
                        else
                        {
                            NSString *queryResult= [infos objectForKey:[self.fieldsName objectForKey:field]];

                            NSLog(@"result = %@", queryResult);
                            if (queryResult && ![queryResult isKindOfClass:[NSNull class]])
                            {
                                [csvWriter writeField:queryResult];
                            }
                            else
                            {
                                [csvWriter writeField:@""];
                            }
                        }
                    }
                    else
                    {
                        NSLog(@"They are different");
                        break;
                    }
                }
            }
            [csvWriter writeLine];
        }
        [csvWriter closeFile];
        [csvWriter release];
        [database close];
    }
}];

仅供参考:我正在尝试比较两个 NSString *,

NSString zID* = [infos objectForKey:[self.fieldsName objectForKey:field]];

NSString *browserID = [curObj valueForKey:@"StudyID"];

那些,是数据库和我的观点之间的链接。我想将数据库导出到 .csv 文件中,但前提是项目当前出现在视图中。

为此,我从视图中获取了一个字段,并从数据库中获取了相同的字段。他们的字段名称不同,这就是我这样做的原因。

算法很简单,我用

选择视图中的第一项
NSManagedObject *curObj = [db itemAtRow:i];

我想通过 NSArray *fields

for (NSString *field in fields)

但是,NSString *field 始终具有相同的值,这是我的 NSArray *fields 中包含的第一个值。

这是输出:

2015-11-18 12:22:37.655 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.655 Hidden[38468:400889] i = 1
2015-11-18 12:22:37.657 Hidden[38468:400889] They are different
2015-11-18 12:22:37.657 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.657 Hidden[38468:400889] i = 2
2015-11-18 12:22:37.658 Hidden[38468:400889] They are different
2015-11-18 12:22:37.659 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.659 Hidden[38468:400889] i = 3
2015-11-18 12:22:37.660 Hidden[38468:400889] They are different
2015-11-18 12:22:37.660 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.660 Hidden[38468:400889] i = 4
2015-11-18 12:22:37.668 Hidden[38468:400889] They are different
2015-11-18 12:22:37.668 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.668 Hidden[38468:400889] i = 5
2015-11-18 12:22:37.793 Hidden[38468:400889] They are different
2015-11-18 12:22:37.794 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.794 Hidden[38468:400889] i = 6
2015-11-18 12:22:37.796 Hidden[38468:400889] They are different
2015-11-18 12:22:37.796 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.796 Hidden[38468:400889] i = 7
2015-11-18 12:22:37.830 Hidden[38468:400889] They are different
2015-11-18 12:22:37.831 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.831 Hidden[38468:400889] i = 8
2015-11-18 12:22:37.833 Hidden[38468:400889] They are different
2015-11-18 12:22:37.833 Hidden[38468:400889] field = ZSERIES.ZSTUDY
2015-11-18 12:22:37.833 Hidden[38468:400889] i = 9

我做错了什么?

如果你们需要,我会添加更多信息。

谢谢。

【问题讨论】:

  • 您永远不会在此代码中增加 i 的值...试试这个:NSManagedObject *curObj = [db itemAtRow:i++];
  • 该死的你是对的。我正在纠正它。还是不行
  • 很难说出你所有的变量类型是什么,但是假设你有一个集合类,为什么不使用内置的枚举器呢?例如-[NSArray enumerateObjectsUsingBlock:].

标签: objective-c nsarray fmdb


【解决方案1】:

curObj 的值不会更新,因为迭代器 i 的值不会在代码中的任何位置更改。始终为 0,初始化为 i=0

将这一行改成如下图:

NSManagedObject *curObj = [db itemAtRow:i++];

【讨论】:

    【解决方案2】:

    实际上,我的问题是 break 语句。

    删除它,现在我的 NSArray* 完美循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多