2017-01-19 5 views
-1

Um zwei Entitäten in Core Data zu suchen, möchte ich ein Array erstellen, das aus beiden Elementen besteht. Es ist einfach, ein Array von Objekten aus einer Entität zu erstellen und mithilfe von valueforkeyy auch ein Array mit nur einem Attribut zu erstellen. Mit arrayByAddingObjectsFromArray können Sie einzelne Attributfelder zu einem langen kombinieren. Ich muss jedoch zwei Attribut-Arrays aus jeder Entität erstellen, die den Namen und die ID enthalten.IOS/Objective-C: Dimensionen von Arrays manipulieren

Kennt jemand eine Möglichkeit, Attribute oder Felder zu löschen, wie Sie in R oder vielen anderen Sprachen tun können, damit ich Arrays mit nur zwei Attributen erstellen kann, die dann zusammengefügt werden können?

Der Ausgang Arrays haben eine unterschiedliche Anzahl von Attributen, dh

cars({ 
     make = "Ford"; 
     model = "Focus"; 
     year = "2010"; 
     carid = 127; 
    }, 
     { 
     make = "Chevy"; 
     model = "Camaro"; 
     year = "2014"; 
     carid = 126; 
     }) 
bikes({ 
     make = "Giant"; 
     year = "2010"; 
     bikeid = 33; 
    }, 
     { 
     make = "Trek"; 
     year = "2014"; 
     bikeid = 34; 
     }) 

für diese Taste verwendet Wert wie in:

NSMutableArray * carmakes = [[cars valueForKey:@"make"] mutableCopy]; 

ich die Arrays

cars(
    "Ford", 
    "Chevy", 
    "Toyota") 

bikes(
    "Giant", 
    "Trek", 
    "Cannondale") 

Und mit umwandeln kann:

vehicles=[_bikes arrayByAddingObjectsFromArray:_cars]; 

kombinieren diese:

vehicles(
"Giant", 
    "Ford", 
    "Chevy", 
    "Toyota", 
    "Giant", 
    "Trek", 
    "Cannondale") 

Allerdings gibt es keine IDs. Wie kann ich ein Array erstellen, die wie folgt aussieht:

vehicles({ 
     make = "Ford"; 
     id = 127; 
    }, 
     { 
     make = "Chevy"; 
     id = 126; 
     }, 
     { 
     make = "Giant"; 
     id = 33; }, 
     { 
     make = "Trek"; 
     id = 34;}) 

Edit:

Hier ist, wie die Eigenschaften in ihren verwalteten Objektdateien angezeigt:

@interface Cars : NSManagedObject 
@property (nonatomic, retain) NSNumber * carid; 
@property (nonatomic, retain) NSString * make; 
@end 

Das Array von der erstellt wird folgender code:

Danke für jede su Empfehlungen.

Antwort

1

Versuchen Sie nicht, es zu sehr zu überdenken. Erstellen Sie eine Methode zum Kombinieren der beiden Arrays.

UPDATE

Vom Fehler du hast, kann ich sehen, dass Sie nicht über Arrays von Wörterbüchern, sondern Coredata Einheiten. Ohne die Entitäten im Spiel zu kennen, ist dies nur ein Rätsel. Ich werde mit Cars, Bikes arbeiten, aber ein Wörterbuch zurückgeben. Möglicherweise müssen Sie dies aktualisieren, um mit einer Vehicles Einheit zu arbeiten.

- (NSArray *)arrayByCombiningCars:(NSArray *)cars bikes:(NSArray *)bikes { 
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:cars.count + bikes.count]; 

    for (Cars *car in cars) { 
     NSAssert(car.make && car.carid, @"car must have a make and cardid."); 
     NSDictionary *vehicle = @{@"make":car.make, @"id": car.carid}; 
     [result addObject:vehicle]; 
    } 

    for (Bikes *bike in bikes) { 
     NSAssert(bike.make && bike.bikeid, @"bike must have a make and bikeid."); 
     NSDictionary *vehicle = @{@"make":bike.make, @"id": bike.bikeid}; 
     [result addObject:vehicle]; 
    } 

    return [result copy]; 
} 
+0

Brilliant. Einfach, sobald du es erklärt hast. Vielen Dank. – Arjun

+0

Dachte das würde funktionieren, aber bekomme Fehler auf Auto [@ "make"] von 'NSInvalidArgumentException', Grund: '- [Autos objectForKeyedSubscript:]: unerkannter Selektor an Instanz gesendet. Make ist ein Attribut. Fehler passiert auch, wenn ich gerade versuche, Auto [@ "make"] zu loggen. Ist es möglich, dass das Array nicht aus Wörterbüchern besteht oder was könnte falsch sein? – Arjun

+0

Das ist, was ich bekomme, wenn ich Auto anmelde: (Einheit: Autos; ID: 0xd000000002dc0000 ; Daten: { make = "Ford"; carid = 6729; timecreated = null; wasedeleted = null; }) – Arjun

Verwandte Themen