2012-06-21 3 views
0

У меня есть массив (элементы) объекты пользовательского класса (CatalogItem), каждый из CatalogItem имеет различные свойства один из которых является освоение называется заголовокОбновление массива объектов пользовательского класса из второго массива

Я пытаюсь обновить this catalogItem.caption в каждом каталоге. Элемент в массиве элементов из nsstrings во втором массиве (tempCaption)

Я знаю, чтобы проходить через массивы, но я не могу получить синтаксис правильно, потому что я, кажется, каждый цикл catalogItem.caption проходит через каждую nsstring в массиве tempCaption. Таким образом, он повторяется как 49 раз, а не 7. catalogItem.caption все в конечном итоге является последним элементом массива tempCaption.

ViewController.m

-(void)parseUpdateCaptions 
{ 
NSMutableArray *tempCaptions = [NSMutableArray array]; 
//get server objects 
PFQuery *query = [PFQuery queryWithClassName:@"UserPhoto"]; 
NSArray* parseArray = [query findObjects]; 
    //fast enum and grab strings and put into tempCaption array 
     for (PFObject *parseObject in parseArray) { 
     [tempCaptions addObject:[parseObject objectForKey:@"caption"]]; 
    } 


//fast enum through each array and put the capString into the catalogItem.caption slot 
//this iterates too much, putting each string into each class object 7 times instead of just putting the nsstring at index 0 in the temCaption array into the catalogItem.caption at index 0, etc. (7 catalogItem objects in total in items array, and 7 nsstrings in tempCaption array) 
for (catalogItem in items) { 
    for (NSString *capString in tempCaptions) { 
      catalogItem.caption = capString; 
      DLog(@"catalog: %@",catalogItem.caption); 
     } 
} 

} 

при необходимости - класс объекта header.h

#import <Foundation/Foundation.h> 

@interface BBCatalogClass : NSObject 


@property (nonatomic, strong) NSData *image; 
@property (nonatomic, strong) NSData *carouselImage; 
@property (nonatomic, strong) NSString *objectID; 
@property (nonatomic, strong) NSString *caption; 
@end 

ответ

1

Я хотел бы попробовать традиционные для зацикливания вместо быстрого перечисления. Это будет работать , если Я правильно вас понимаю, что индексы двух массивов выровнены.

for(int i = 0; i<items.count; i++) { 
    catalogItem = [items objectAtIndex:i]; 
    catalogItem.caption = [tempCaptions objectAtIndex:i]; 
} 
+0

Этот метод работал, за исключением того, что мне пришлось изменить [array objectatindex: i] .caption to catalogItem = [items objectAtIndex: i]; catalogItem.caption = [tempCaptions objectAtIndex: i]; – BigB

+0

Прохладный, ожидаемый. Я обновил ответ, чтобы любой, кто наткнулся на это, увидит это ясно. –

0

Вы выполняете итерацию с помощью вложенного цикла. Это означает, что общее количество итераций будет (items.count * tempCaptions.count).

Таким образом, вы должны выполнить быструю итерацию как в одном цикле, так и в традиционном подходе, как было предложено выше.

+0

из любопытства, как это сделать, используя быстрое перечисление в одном цикле? – BigB

Смежные вопросы