遍历 NSArray
Looping though NSArray
我在遍历 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"];
那些,是数据库和我的视图之间的 link。我想将数据库导出到 .csv 文件中,但前提是项目当前出现在视图中。
为此,我从视图中获取了一个字段,并从数据库中获取了相同的字段。他们的字段名称不同,这就是我这样做的原因。
算法很简单,我用
选择我认为的第一项
NSManagedObject *curObj = [db itemAtRow:i];
我想遍历 NSArray *字段
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
我做错了什么?
如果你们需要,我会添加更多信息。
谢谢。
curObj
的值未更新,因为迭代器 i
的值未在代码中的任何位置更改。初始化时始终为 0 i=0
.
如下所示更改此行:
NSManagedObject *curObj = [db itemAtRow:i++];
实际上,我的问题是 break 语句。
删除它,现在我的 NSArray* 完美循环。
我在遍历 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"];
那些,是数据库和我的视图之间的 link。我想将数据库导出到 .csv 文件中,但前提是项目当前出现在视图中。
为此,我从视图中获取了一个字段,并从数据库中获取了相同的字段。他们的字段名称不同,这就是我这样做的原因。
算法很简单,我用
选择我认为的第一项NSManagedObject *curObj = [db itemAtRow:i];
我想遍历 NSArray *字段
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
我做错了什么?
如果你们需要,我会添加更多信息。
谢谢。
curObj
的值未更新,因为迭代器 i
的值未在代码中的任何位置更改。初始化时始终为 0 i=0
.
如下所示更改此行:
NSManagedObject *curObj = [db itemAtRow:i++];
实际上,我的问题是 break 语句。
删除它,现在我的 NSArray* 完美循环。