CHCSVParser是否具有列解析限制?

时间:2016-09-17 05:38:24

标签: ios arrays csv core-data

在我的应用程序中,您可以通过制表符分隔值文件导入数据。在解析"位置"之前,我没有任何挑战。有多个项目附加到他们身上。如果滚动到第二种方法的最底部,您可以看到我如何在Core Data内创建项目与包含它们的位置之间的关系。当我解析位置中的第31列时,会发生此问题。它不会将这些项目附加到该位置。所以我的问题是这个; NSArray中由CHCSVParser解析的列是否有限制?如果不是,会导致这个限制为31列?

我已经发布了下面遇到错误的两种方法。

+ (void) importDatabaseTSVURL:(NSURL*)url {        

// First check if there is already a database. If so, stop import.        

if ([XSELLocation locations].count > 0) return;        

if ([XSELItem items].count > 0) return;        

if ([XSELVendor vendors].count > 0) return;        



NSError *error;        

NSArray *array = [NSArray arrayWithContentsOfDelimitedURL:url options:CHCSVParserOptionsSanitizesFields delimiter:'\t' error:&error];        



if ([[[array firstObject] firstObject] isEqualToString:@"XSELINVENTORYTSV"]) {        

    for (NSArray *row in array) {        

        [XSELSettings parseImportDataRow:row];        

    }        

}        

}        



+ (void) parseImportDataRow:(NSArray*)array {        

// Create logic to seperate data entered next        

static NSString *operation = @"none";        

if ([array.firstObject isEqualToString:@"ITEMLIST"]) {        

    operation = @"items";        

    return;        

}        

else if ([array.firstObject isEqualToString:@"LOCATIONLIST"]) {        

    operation = @"locations";        

    return;        

}        

else if ([array.firstObject isEqualToString:@"VENDORLIST"]) {        

    operation = @"vendors";        

    return;        

}        

else if ([array.firstObject isEqualToString:@"ENDLIST"]) { // Create database, relate objects, and clean up the data        

    operation = @"none";        

    return;        

}        



// Parse rows to the correct array.        

if ([operation isEqualToString:@"vendors"]) {        

    NSLog(@"adding vendor");        

    XSELVendor *vendor = [XSELVendor addVendor];        

    vendor.vendorID = [NSNumber numberWithInteger:[[array objectAtIndex:0] integerValue]];        

    [XSELSettings nextVendorID];        

    vendor.name = [array objectAtIndex:1];        

    vendor.contactID = [array objectAtIndex:2];        

}        

else if ([operation isEqualToString:@"items"]) {        

    NSLog(@"adding item");        

    XSELItem *item = [XSELItem addItem];        

    item.itemID = [NSNumber numberWithDouble:[[array objectAtIndex:0] integerValue]];        

    [XSELSettings nextItemID];        

    item.name = [array objectAtIndex:1];        

    item.smallPackageName = [array objectAtIndex:2];        

    item.bigPackageName = [array objectAtIndex:3];        

    item.smallPerBig = [NSNumber numberWithDouble:[[array objectAtIndex:4] integerValue]];        

    item.buildTo = [NSNumber numberWithDouble:[[array objectAtIndex:5] integerValue]];        

    item.price = [NSNumber numberWithDouble:[[array objectAtIndex:6] integerValue]];        



    // Relate preferred vendor to item        

    for (XSELVendor *vendor in [XSELVendor vendors]) {        

        if ([vendor.vendorID.stringValue isEqualToString:[array objectAtIndex:7]]) {        

            item.preferredVendor = vendor;        

            break;        

        }        

    }        

}        

else if ([operation isEqualToString:@"locations"]) {        

    NSLog(@"adding location");        

    XSELLocation *location = [XSELLocation addLocation:[array objectAtIndex:1]];        

    location.locationID = [NSNumber numberWithInteger:[[array objectAtIndex:0] integerValue]];        

    [XSELSettings nextLocationID];        

    location.position = [NSNumber numberWithInteger:[[array objectAtIndex:2] integerValue]];        





    // Relate location with items        

    unsigned long itemsRelatedCount = array.count - 3;        

    NSLog(@"\n\nitemsRelated: %lu\n\n", itemsRelatedCount);        

    NSMutableOrderedSet *items = [NSMutableOrderedSet orderedSet];        

    for (int i = 0; i < itemsRelatedCount; i++) {        

        NSString *itemID = [array objectAtIndex:i];        

        for (XSELItem *item in [XSELItem items]) {        

            if ([item.itemID.stringValue isEqualToString:itemID]) {        

                [items addObject:item];        

                break;        

            }        

        }        

    }        

    location.items = items;        

}        



}        

0 个答案:

没有答案