UICollectionview datas loading issue - ios

Hi i have implemented UICollectionView in my app..If my array count value greater than 20 and when i tried to scroll the view it was not showing previous datas,,
In cellForItemAtIndexPath:(NSIndexPath *)indexPath method every time i check
if (indexPath.row == [recipeImages count] - 1)
{
[self loadDatas];
}
method.So that i could download 10 datas everytime...
-(UICollectionViewCell *)collectionView:(UICollectionView*)collectionViewcellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = #"CourseList";
NSLog(#"indexpath %# in cell for row",indexPath);
CollectionCellContent *cell = (CollectionCellContent*)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
NSDictionary *course;
course=[courselist objectAtIndex:indexPath.row];
cell.coursename.text=[course objectForKey:#"course_name"];
cell.authorname.text=[course objectForKey:#"course_author"];
cell.price.text=[course objectForKey:#"course_price"];
cell.cover.image=[UIImage imageNamed:[course objectForKey:#"course_cover_image"]];
cell.review.image=[UIImage imageNamed:[course objectForKey:#"ratings"]];
NSString *imageUrlString = [[NSString alloc]initWithFormat:#"%#/%#/%#",delegate.course_image_url,[course objectForKey:#"course_id"],[course objectForKey:#"course_cover_image"]];
UIImage *imageFromCache = [self.imageCache objectForKey:imageUrlString];
if (imageFromCache) {
cell.cover.image= imageFromCache;
}
else
{
cell.cover.image = [UIImage imageNamed:#"placeholder"];
[self.imageOperationQueue addOperationWithBlock:^{
NSURL *imageurl = [NSURL URLWithString:imageUrlString];
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageurl]];
if (img != nil) {
[self.imageCache setObject:img forKey:imageUrlString];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
CollectionCellContent *updateCell = (CollectionCellContent*)[self.ipadcollection cellForItemAtIndexPath:indexPath];
if (updateCell) {
[updateCell.cover setImage:img];
}
}];
}
}];
}
if (indexPath.row == [courselist count] - 1)
[self loadDatas];
return cell;
}
in load datas method:
[categorylist addObject:[arrayList1 objectForKey:#"category_name"]];
[category_tableView reloadData];
whenever i call reload data method i am facing this issue..
-(void)loadDatas
{
NSString *urltemp=[[databaseurl sharedInstance]DBurl];
NSString *url1=#"AllCourse.php";
NSString *URLString=[NSString stringWithFormat:#"%#%#?offset=%d",urltemp,url1,offset];
NSMutableArray *search = [du MultipleCharacters:URLString];
NSDictionary* menu = [search valueForKey:#"serviceresponse"];
NSArray *Listofdatas=[menu objectForKey:#"Course List"];
NSMutableArray *temp1=[[NSMutableArray alloc]init];
if ([Listofdatas count]>0)
{
for (int i=0;i<[Listofdatas count];i++)
{
NSDictionary *arrayList1= [Listofdatas objectAtIndex:i];
NSDictionary* temp=[arrayList1 objectForKey:#"serviceresponse"];
// NSLog(#"Received Values %#",temp);
if (offset==0) {
[courselist addObject:temp];
}
else
[temp1 addObject:temp];
}
if (offset!=0)
{
NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];
for (NSInteger index =courselist.count; index < (courselist.count + temp1.count); index++) {
[arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:index inSection:0]];
}
if (courselist) {
[courselist addObjectsFromArray:temp1];
[self.ipadcollection performBatchUpdates:^{
[self.ipadcollection insertItemsAtIndexPaths:arrayWithIndexPaths];
}
completion:nil];
// [self.collectionView reloadData];
}
else {
courselist = [[NSMutableArray alloc] initWithArray:temp1];
}
}
if (![HUD isHidden]) {
[HUD hide:YES];
}
}
offset+=10;
[self.ipadcollection reloadData];
}

Make some delay before reloading UICollectionView.
[self performSelector:#selector(reloaddatas) withObject:nil afterDelay:0.5f];

Related

UICollectionViewCell one of the section from UICollectionView Cell Repeating same cell for multiple times

I have an old project done by a developer some times ago.. This particular project has 3 collection views such as collectionAnnouncments, collectionNews and collectionBulletin.
The first collectionview collectionAnnouncments is loading a same cell 10 times. But other two sections loading the cell correctly one time as per the response count.
I don't have any idea up to now for this problem. I tried some solutions from the google but I couldn't sorted because of the bad UI and Code implementation by that developer.
Ex- He used one UICollectionView Inside a tableview and using UICollectionView Class for all 3 collectionview and used a general cell for all collectionviews.
declaration... in m file
__weak IBOutlet UITableView *table;
UICollectionView *collectionAnnouncments, *collectionBulletin,
*collectionNews;
Please check the following codes and provide me a better simple solution to fix this issue without any major modifications or re-implementation because I don't have time for that.
- (void)viewDidLoad {
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = NO;
home.title=[Utilities getLocalizedStringForKey:#"Home"];
[Utilities setNavigationController:self];
//self.label.text=NSLocalizedFailureReasonErrorKey
self.navigationItem.leftBarButtonItem = nil;
__block BOOL newsDone = NO, bulletInDone = NO, announcmentDone = NO, refreshed = NO;
collectionViewDic = [[NSMutableDictionary alloc]init];
[Utilities serverRequest:#{#"getNewsfeed":#"a6dba37437ced2c3b07469fd6c0661f3"} completionBlock:^(id response) {
collectionViewDic[#"news"] = response[#"response"];
NSArray *responseValues = [response[#"response"] allValues]; // An NSArray of NSArrays
NSMutableArray *dictionarys = [NSMutableArray new];
for (NSArray *dictArrays in responseValues) {
for (NSDictionary *dict in dictArrays) {
[dictionarys addObject:dict];
}
}
_newsArray = dictionarys;
NSLog(#"news%#",dictionarys);
// sorting to newest
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:#"nf_id" ascending:NO];
_sortednewsArray = [_newsArray sortedArrayUsingDescriptors:#[sortDescriptor]];
NSLog(#"Sorted news Response -%#", _sortednewsArray);
//Registeriing the collectionview custom cell
// [UICollectionView registerClass:[CustomCell class] forCellWithReuseIdentifier:#"customCell"];
// [collectionAnnouncments registerClass:[CustomCell class] forCellWithReuseIdentifier:#"customCell"];
// [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:#"Cell"];
newsDone = YES;
if (newsDone && bulletInDone && announcmentDone && !refreshed) {
refreshed = YES;
[table reloadData];
}
} errorBlock:nil];
[Utilities serverRequest:#{#"getBulletin":#"a6dba37437ced2c3b07469fd6c0661f3"} completionBlock:^(id response) {
// NSString *bulletinID = #"wb_id";
collectionViewDic[#"bulletin"] = response[#"response"];
NSArray *responseValues = [response[#"response"] allValues]; // An NSArray of NSArrays
NSMutableArray *dictionarys = [NSMutableArray new];
for (NSArray *dictArrays in responseValues) {
for (NSDictionary *dict in dictArrays) {
[dictionarys addObject:dict];
}
}
_bulletinArray = dictionarys;
NSLog(#"bulletin%#",dictionarys);
// sorting to newest
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:#"wb_id" ascending:NO];
_sortedbulletinArray = [_bulletinArray sortedArrayUsingDescriptors:#[sortDescriptor]];
NSLog(#"Sorted bulletin Response -%#", _sortedbulletinArray);
bulletInDone = YES;
if (newsDone && bulletInDone && announcmentDone && !refreshed) {
refreshed = YES;
[table reloadData];
}
} errorBlock:nil];
[Utilities serverRequest:#{#"getAnnouncement":#"a6dba37437ced2c3b07469fd6c0661f3"} completionBlock:^(id response) {
collectionViewDic[#"announcement"] = response[#"response"];
NSArray *responseValues = [response[#"response"] allValues]; // An NSArray of NSArrays
NSMutableArray *dictionarys = [NSMutableArray new];
for (NSArray *dictArrays in responseValues) {
for (NSDictionary *dict in dictArrays) {
[dictionarys addObject:dict];
}
}
_annArray = dictionarys;
NSLog(#"AnnouncementResponse%#",dictionarys);
NSLog(#" Ann ID%#", [dictionarys valueForKey:#"anc_id"]);
// sorting to newest
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:#"date_added" ascending:NO];
_sortedAnnArray = [_annArray sortedArrayUsingDescriptors:#[sortDescriptor]];
NSLog(#"Sorted Array Response -%#", _sortedAnnArray);
NSLog(#"Sorted Ann Array-count%zd",_sortedAnnArray.count);
NSLog(#"Sorted Ann ID%#", [_sortedAnnArray valueForKey:#"anc_id"]);
announcmentDone = YES;
if (newsDone && bulletInDone && announcmentDone && !refreshed) {
refreshed = YES;
[table reloadData];
}
} errorBlock:nil];
menuView = [Utilities addMenuView:self];
}
-(void)getNewsFeed
{
collectionViewDic = [[NSMutableDictionary alloc]init];
[Utilities serverRequest:#{#"getNewsfeed":#"a6dba37437ced2c3b07469fd6c0661f3"} completionBlock:^(id response) {
if(response != nil)
{
if ([response isKindOfClass:[NSString class]]) {
// print response .
NSLog(#"MAIN RESPONSE!%#",response);
}
//on successfully response, which provided dictionary,
else if ([[response objectForKey:#"success"] boolValue] == true) {
// on true print response data.
collectionViewDic[#"news"] = response[#"response"];
NSArray *responseValues = [response[#"response"] allValues]; // An NSArray of NSArrays
NSMutableArray *dictionarys = [NSMutableArray new];
for (NSArray *dictArrays in responseValues) {
for (NSDictionary *dict in dictArrays) {
[dictionarys addObject:dict];
}
}
_newsArray = dictionarys;
NSLog(#"news%#",dictionarys);
// sorting to newest
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:#"nf_id" ascending:NO];
_sortednewsArray = [_newsArray sortedArrayUsingDescriptors:#[sortDescriptor]];
NSLog(#"Sorted news Response -%#", _sortednewsArray);
}
//on success response, with failure message which is false.
else if ([[response objectForKey:#"success"] boolValue] == false) {
// handle error on success is false.
}
}
} errorBlock:nil];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
#try {
NSString *key = #"";
if ([collectionView isEqual:collectionNews])
key = #"news";
else if ([collectionView isEqual:collectionAnnouncments])
key = #"announcement";
else if ([collectionView isEqual:collectionBulletin])
key = #"bulletin";
NSDictionary *mainDic = collectionViewDic[key];
NSArray *array = mainDic[ [mainDic allKeys][0] ];
return [array count];
} #catch (NSException *exception) {
return 0;
}
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
#try {
//NSString *key = #"";
if ([collectionView isEqual:collectionNews])
return _sortednewsArray.count;
else if ([collectionView isEqual:collectionAnnouncments])
return _sortedAnnArray.count;
else if ([collectionView isEqual:collectionBulletin])
return _sortedbulletinArray.count;
}
#catch (NSException *exception) {
return 0;
}
// return _sortedAnnArray.count + _sortednewsArray.count + _sortedbulletinArray.count;
// return [[collectionViewDic allKeys] count];
// return 50;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:#"generalCell" forIndexPath:indexPath];
// CustomCell *cell = (CustomCell *)[collectionView dequeueReusableCellWithReuseIdentifier:#"customCell" forIndexPath:indexPath];
// cell.tag = indexPath.row;
[cell setTag:indexPath.row];
//UILabel *test = [cell.contentView viewWithTag:1];
UIImageView *image = [cell.contentView viewWithTag:1];
//UILabel *cellTitle = [cell.contentView viewWithTag:2];
//UILabel *cellHead =[cell.contentView viewWithTag:2];
if ([collectionView isEqual:collectionAnnouncments]) {
// NSDictionary *mainDic = collectionViewDic[#"announcement"];
// NSArray *array = mainDic[ [mainDic allKeys][indexPath.section] ];
NSDictionary *dic = _sortedAnnArray[indexPath.section] ;
collectionAnnouncments.delegate = self;
collectionAnnouncments.dataSource = self;
// cellHead.text =#"Announcements";
//cellTitle.text = dic[#"anc_title"];
if ([dic[#"announcement_images"] count] > 0)
[image setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",ANNOUNCMENT_IMAGES_URL,dic[#"announcement_images"][0][#"wi_image"] ] ]] ;
}
else if([collectionView isEqual:collectionNews]) {
//cellHead.text =#"News";
// NSDictionary *mainDic = collectionViewDic[#"news"];
// NSArray *array = mainDic[ [mainDic allKeys][0] ];
NSDictionary *dic = _sortednewsArray[indexPath.section] ;
collectionNews.delegate = self;
collectionNews.dataSource = self;
//cellTitle.text = dic[#"nf_title"];
if ([dic[#"newsfeed_images"] count] > 0)
[image setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",NEWS_IMAGES_URL,dic[#"newsfeed_images"][0][#"wi_image"] ] ]] ;
}
else if([collectionView isEqual:collectionBulletin]) {
// NSDictionary *mainDic = collectionViewDic[#"bulletin"];
// NSArray *array = mainDic[ _sortedbulletinArray[indexPath.section] ];
NSDictionary *dic = _sortedbulletinArray[indexPath.section] ;
collectionBulletin.delegate = self;
collectionBulletin.dataSource = self;
// cellTitle.text = dic[#"wb_title"];
if ([dic[#"bulletin_images"] count] > 0)
if ([dic[#"bulletin_images"][0][#"wi_type"] isEqualToString:#"video"]) {
[image setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",BULLETIN_IMAGES_URL,dic[#"ws_thumb"] ] ]] ;
}
else{
[image setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#%#",BULLETIN_IMAGES_URL,dic[#"bulletin_images"][0][#"wi_image"] ] ]] ;
}
}
return cell;
}
#pragma mark UITableView Delegate, DataSource
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 195.0f;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[collectionViewDic allKeys] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:#"tableCell"];
cell.tag = indexPath.row;
UICollectionView *c = [cell.contentView viewWithTag:111];
//c.scrollEnabled = NO;
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc]init];
flow.minimumLineSpacing = flow.minimumInteritemSpacing = 0.0f;
flow.itemSize = CGSizeMake([UIScreen mainScreen].bounds.size.width/1, c.bounds.size.height);
flow.scrollDirection = UICollectionViewScrollDirectionHorizontal;
// c.collectionViewLayout = flow;
UIView *header = [cell.contentView viewWithTag:1];
UIImageView *headerImage = [header viewWithTag:2];
UILabel *headerTitle = [header viewWithTag:3];
//NSLog(cell.tag);
switch (indexPath.row) {
case 0:
//NSLog(#"text");
headerImage.image = [UIImage imageNamed:#"Announcemets"];
//headerTitle.text = #"Announcments";
headerTitle.text=[Utilities getLocalizedStringForKey:#"Announcement"];
// NSLog(headerTitle.text);
collectionAnnouncments = c;
[collectionAnnouncments setCollectionViewLayout:flow];
collectionAnnouncments.delegate = self;
collectionAnnouncments.dataSource = self;
[collectionAnnouncments reloadData];
// NSLog(#"text");
break;
case 1:
headerImage.image = [UIImage imageNamed:#"News"];
headerTitle.text=[Utilities getLocalizedStringForKey:#"Business Highlight"];
collectionNews = c;
[collectionNews setCollectionViewLayout:flow];
collectionNews.delegate = self;
collectionNews.dataSource = self;
[collectionNews reloadData];
//NSLog(#"text");
break;
case 2:
headerImage.image = [UIImage imageNamed:#"Bulletin"];
headerTitle.text=[Utilities getLocalizedStringForKey:#"Bulletin Board"];
collectionBulletin = c;
[collectionBulletin setCollectionViewLayout:flow];
collectionBulletin.delegate = self;
collectionBulletin.dataSource = self;
[collectionBulletin reloadData];
//NSLog(#"text");
break;
default:
break;
}
return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.destinationViewController isKindOfClass:[NewsListing class]]) {
NewsListing *c = segue.destinationViewController;
NSInteger row = ((UIButton *)sender).superview.superview.superview.tag;
if (row == 0) {
c.isAnnouncement = YES;
c.listingArray = collectionViewDic[#"announcement"];
}
else if (row == 1) {
c.isNews = YES;
c.listingArray = collectionViewDic[#"news"];
}
else if (row == 2) {
c.isBulletin = YES;
c.listingArray = collectionViewDic[#"bulletin"];
}
}
if ([segue.destinationViewController isKindOfClass:[NewsDetail class]]) {
NewsDetail *c = segue.destinationViewController;
UICollectionViewCell *cell = sender;
NSInteger row = ((UIButton *)sender).superview.superview.superview.tag;
if (row == 0) {
c.isAnnouncement = YES;
// NSDictionary *months = collectionViewDic[#"announcement"];
NSIndexPath *indexPath = [collectionAnnouncments indexPathForCell:cell];
// NSArray *month = months[[months allKeys][0] ];
NSArray *month = _sortedAnnArray;
c.detailDic = month[indexPath.section ];
}
else if (row == 1) {
c.isNews = YES;
// NSDictionary *months = collectionViewDic[#"news"];
NSIndexPath *indexPath = [collectionNews indexPathForCell:cell];
// NSArray *month = months[[months allKeys][0] ];
NSArray *month = _sortednewsArray;
c.detailDic = month[indexPath.section ];
}
else if (row == 2) {
c.isBulletin = YES;
// NSDictionary *months = collectionViewDic[#"bulletin"];
NSIndexPath *indexPath = [collectionBulletin indexPathForCell:cell];
// NSArray *month = months[[months allKeys][0] ];
NSArray *month = _sortedbulletinArray;
c.detailDic = month[indexPath.section ];
}
}
}
#end

how to plus and minus when button is clicked in uitabelview row and section and reload like foodpanda

I am creating app link food panda.let me explain the flow.I have a vc with table with rows and sections when i click on section it will expand and collapsing rows.in the section there is add button in each rows.wqhen i click on add button in section 3 row the button should hide and + and - button should show like the image given below.
2.when i click on the pluse and minus button it should add to cart and money should increase and decrease amount in cart i used below code for expand and collapse sections.
#implementation menulistingVC
- (void)viewDidLoad {
[super viewDidLoad];
[super viewDidLoad];
menuarray=[[NSMutableArray alloc]init];
arrselectedrow=[[NSMutableArray alloc]init];
defaults = [NSUserDefaults standardUserDefaults];
apiCall = [[APICall alloc]init];
isMultipleExpansionAllowed = NO;
arrSelectedSectionIndex = [[NSMutableArray alloc] init];
if (!isMultipleExpansionAllowed) {
[arrSelectedSectionIndex addObject:[NSNumber numberWithInt:countt+20]];
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:#selector(loadtable:)
name:#"array" object:nil];
_tblview.estimatedRowHeight = 69;
_tblview.rowHeight = UITableViewAutomaticDimension;
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)loadtable:(NSNotification*)notification
{
isMultipleExpansionAllowed = NO;
arrSelectedSectionIndex = [[NSMutableArray alloc] init];
if (!isMultipleExpansionAllowed) {
[arrSelectedSectionIndex addObject:[NSNumber numberWithInt:countt+20]];
}
[self getingfooddeatilsbacedonclub:[notification object]];
}
-(void)getingfooddeatilsbacedonclub:(NSString *)typestr{
_clubstr = [[NSUserDefaults standardUserDefaults]
stringForKey:#"newclubid"];
// accessToken=[defaults valueForKey:#"accessToken"];
// clubberId = [defaults valueForKey:#"idClubber_dtls"];
if (![APICall hasNetwork])
{
[Util displayToastMessage:#"No internet connection"];
}else
{
[customBezelActivityView activityViewForView:self.view];
NSString *urlstr = [NSString stringWithFormat:#"%s/presignin/menu/list/category/by_venue?clubId=%#&type=%#",urlPath,_clubstr,typestr];
NSLog(#"getherd :%#",urlstr);
[apiCall getArrayFromApiwithstauscode:urlstr restfulType:kRestfulGet andUseContentType:NO withRequestBody:nil completionHandler:^(NSArray *result, NSInteger statuscodeint){
NSLog(#"classifieds List response:%#",result);
NSLog(#"statuscode List response:%ld",(long)statuscodeint);
if (statuscodeint==200) {
dispatch_async(dispatch_get_main_queue(), ^{
[customBezelActivityView removeViewAnimated:YES];
menuarray=[result mutableCopy];
isMultipleExpansionAllowed = NO;
if (!isMultipleExpansionAllowed) {
[arrSelectedSectionIndex addObject:[NSNumber numberWithInt:countt+20]];
}
[_tblview reloadData];
});
}else if (statuscodeint==401){
dispatch_async(dispatch_get_main_queue(), ^{
[customBezelActivityView removeViewAnimated:YES];
UIStoryboard *storyBoard =[UIStoryboard storyboardWithName:#"Main" bundle:nil];
SignInViewController *SignINViewController=[storyBoard instantiateViewControllerWithIdentifier:#"SignINViewController"];
[self presentViewController:SignINViewController animated:YES completion:nil];
});
}
}];
}
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return menuarray.count;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([arrSelectedSectionIndex containsObject:[NSNumber numberWithInteger:section]])
{
NSArray *arr=[menuarray[section] valueForKey:#"menu"];
return arr.count;
}else{
return 0;
}
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = #"MenudetailsTblCell";
menudetailscell = ( MenudetailsTblCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (menudetailscell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:#"MenudetailsTblCell" owner:self options:nil];
menudetailscell = [nib objectAtIndex:0];
}
if (menudetailscell == nil)
{
menudetailscell = [[MenudetailsTblCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
menudetailscell.detailview.layer.cornerRadius = 3.0;
menudetailscell.detailview.layer.masksToBounds = YES;
if (indexPath.row==0) {
menudetailscell.toplbl.hidden=YES;
}else{
menudetailscell.toplbl.hidden=NO;
}
menudetailscell.addbtntocart.layer.cornerRadius = 5.0;
menudetailscell.addbtntocart.layer.masksToBounds = YES;
menudetailscell.addbtntocart.tag=indexPath.row;
menudetailscell.plusebtn.tag=indexPath.row;
menudetailscell.minusbtn.tag=indexPath.row;
menudetailscell.plusebtn.hidden=YES;
menudetailscell.minusbtn.hidden=YES;
menudetailscell.noofitemslbl.hidden=YES;
NSArray *arr=[menuarray[indexPath.section] valueForKey:#"menu"];
menudetailscell.typelbl.text=[[arr objectAtIndex:indexPath.row]valueForKey:#"name"];
menudetailscell.describtionlbl.text=[[arr objectAtIndex:indexPath.row]valueForKey:#"description"];
NSString *cost=[NSString stringWithFormat:#"%#%#",[[arr objectAtIndex:indexPath.row]valueForKey:#"price"],#".00"];
NSString *imgid=[NSString stringWithFormat:#"%#",[[arr objectAtIndex:indexPath.row]valueForKey:#"idmenus"]];
NSString *tax=[NSString stringWithFormat:#"%#",[[arr objectAtIndex:indexPath.row]valueForKey:#"tax"]];
if ([tax isEqualToString:#"tax"]) {
menudetailscell.taxlbl.text=#"(*Inclusive of all taxes)";
}else{
menudetailscell.taxlbl.text=#"(*Exclusive of all taxes)";
}
menudetailscell.ratelbl.text=[NSString stringWithFormat:#"%# %#",[[arr objectAtIndex:indexPath.row]valueForKey:#"country"],cost];
[ menudetailscell.addbtntocart addTarget:self action:#selector(addbtnclicked:)forControlEvents:UIControlEventTouchUpInside];
NSString *typeimgUrl1 = [NSString stringWithFormat:#"%s/presignin/menu/showMedia?idMenu=%#",urlPath,imgid];
NSURL *imageURL=[NSURL URLWithString:typeimgUrl1];
menudetailscell.imgview.imageURL=imageURL;
[menudetailscell.plusebtn addTarget:self action:#selector(pluseTapShowHideSection:) forControlEvents:UIControlEventTouchUpInside];
[menudetailscell.minusbtn addTarget:self action:#selector(minusTapShowHideSection:) forControlEvents:UIControlEventTouchUpInside];
menudetailscell.selectionStyle = UITableViewCellSelectionStyleNone;
return menudetailscell;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static NSString *CellIdentifier = #"Menusectioncell";
menusectioncell = ( Menusectioncell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (menusectioncell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:#"Menusectioncell" owner:self options:nil];
menusectioncell = [nib objectAtIndex:0];
}
if (menusectioncell == nil)
{
menusectioncell = [[Menusectioncell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if ([arrSelectedSectionIndex containsObject:[NSNumber numberWithInteger:section]])
{
// right-arrow //down-arrow
menusectioncell.Sectiomtitlebtn.selected = YES;
menusectioncell.dotlbl.hidden=NO;
menusectioncell.expandtypeimg.image=[UIImage imageNamed:#"down-arrow"];
}
else{
menusectioncell.dotlbl.hidden=YES;
menusectioncell.expandtypeimg.image=[UIImage imageNamed:#"right-arrow"];
}
menusectioncell.Sectiomtitlebtn.tag=section;
menusectioncell.dotlbl.layer.cornerRadius = menusectioncell.dotlbl.frame.size.height/2;
menusectioncell.dotlbl.layer.masksToBounds = YES;
[menusectioncell.Sectiomtitlebtn addTarget:self action:#selector(btnTapShowHideSection:) forControlEvents:UIControlEventTouchUpInside];
NSString *btntitle=[menuarray[section] valueForKey:#"catagory"];
itemarr=[menuarray[section] valueForKey:#"menu"];
NSString *items=[itemarr[0] valueForKey:#"name"];
menusectioncell.sectiontitleilb.text=btntitle;
if (itemarr.count==1) {
menusectioncell.itemslbl.text=[NSString stringWithFormat:#"%#",items];
}else{
NSString *seconditemstr=[itemarr[1] valueForKey:#"name"];
menusectioncell.itemslbl.text=[NSString stringWithFormat:#"%#,%# etc..",items,seconditemstr];
}
menusectioncell.selectionStyle = UITableViewCellSelectionStyleNone;
return menusectioncell.contentView;
}
-(IBAction)btnTapShowHideSection:(UIButton*)sender
{
int section=sender.tag;
if (!sender.selected)
{
//originallcode
if (!isMultipleExpansionAllowed) {
[arrSelectedSectionIndex addObject:#"-1"];
[arrSelectedSectionIndex replaceObjectAtIndex:0 withObject:[NSNumber numberWithInteger:sender.tag]];
}else {
NSLog(#"%#",arrSelectedSectionIndex);
[arrSelectedSectionIndex addObject:[NSNumber numberWithInteger:sender.tag]];
}
menusectioncell.dotlbl.hidden=YES;
menusectioncell.expandtypeimg.image=[UIImage imageNamed:#"right-arrow"];
sender.selected = YES;
}
else{
sender.selected = NO;
menusectioncell.dotlbl.hidden=NO;
menusectioncell.expandtypeimg.image=[UIImage imageNamed:#"down-arrow"];
if ([arrSelectedSectionIndex containsObject:[NSNumber numberWithInteger:sender.tag]])
{
[arrSelectedSectionIndex removeObject:[NSNumber numberWithInteger:sender.tag]];
}
}
if (!isMultipleExpansionAllowed) {
[_tblview reloadData];
}else {
[_tblview reloadSections:[NSIndexSet indexSetWithIndex:sender.tag] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
- (void)addbtnclicked:(UIButton *)sender
{
menudetailscell.plusebtn.hidden=NO;
menudetailscell.minusbtn.hidden=NO;
menudetailscell.noofitemslbl.hidden=NO;
menudetailscell.addbtntocart.hidden=YES;
int rowselect=sender.tag;
[arrselectedrow addObject:[NSNumber numberWithInteger:sender.tag]];
NSIndexPath* indexPath1 = [NSIndexPath indexPathForRow:sender.tag inSection:sectionselect];
[self.tblview beginUpdates];
[self.tblview reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath1, nil] withRowAnimation:UITableViewRowAnimationNone];
[self.tblview endUpdates];
}
- (void)pluseTapShowHideSection:(UIButton *)sender
{
}
- (void)minusTapShowHideSection:(UIButton *)sender
{
if ([arrselectedrow containsObject:[NSNumber numberWithInteger:sender.tag]])
{
[arrselectedrow removeObject:[NSNumber numberWithInteger:sender.tag]];
}
[self.tblview beginUpdates];
[self.tblview reloadRowsAtIndexPaths:[NSArray arrayWithObjects:arrselectedrow, nil] withRowAnimation:UITableViewRowAnimationNone];
[self.tblview endUpdates];
}

iOS Obj-C - UITableView data disappears when modal view dismissed

I have a uitableview inside of a view controller, and a button underneath of my uitableview. Tapping this button opens a modal view. I've created a "close" button inside my modal using the following code:
modalview.m
- (IBAction)closeButton:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
However when I tap to dismiss my modal view, all of the data in my uitableview seems to disappear (the uitableview just goes white)? Any idea why this might be, and how can I fix it? Here is how my tableview data is loaded and structured (hope this helps):
ViewController.m
-(void)updateMessages {
self.tableView.dataSource = self;
NSMutableDictionary *viewParams = [NSMutableDictionary new];
[viewParams setValue:#"name" forKey:#"view_name"];
[DIOSView viewGet:viewParams success:^(AFHTTPRequestOperation *operation, id responseObject) {
self.messages = (NSMutableArray *)responseObject;
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(#"Failure: %#", [error localizedDescription]);
}];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self updateMessages];
static NSString *ChatTableIdentifier = #"ChatTableViewCell";
static NSString *ChatTableIdentifier2 = #"SwapDetailTableViewCell";
UINib *nib = [UINib nibWithNibName: ChatTableIdentifier bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier: ChatTableIdentifier];
UINib *nib2 = [UINib nibWithNibName: ChatTableIdentifier2 bundle:nil];
[self.tableView registerNib:nib2 forCellReuseIdentifier: ChatTableIdentifier2];
self.tableView.dataSource = self;
[self.tableView reloadData];
}
- (int)numberOfSectionsInTableView: (UITableView *)tableview
{
return 1;
}
- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.messages count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *data = self.messages[indexPath.row];
id swaptime = data[#"swaptime"];
if ([swaptime isKindOfClass:[NSString class]]) {
// There is a valid "swaptime" value
static NSString *ChatTableIdentifier2 = #"SwapDetailTableViewCell";
SwapDetailTableViewCell *cell = (SwapDetailTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier2 forIndexPath:indexPath];
NSString *time = data[#"swaptime"];
cell.startTime.text = time;
NSString *timeEnd = data[#"endswaptime"];
cell.endTime.text = timeEnd;
NSString *costofSwap = data[#"swapvalue"];
cell.swapValue.text = costofSwap;
NSString *fromUsername = data[#"first name"];
cell.fromUser.text = fromUsername;
NSString *pet = data[#"pet's name"];
cell.petsname.text = pet;
NSString *swapStatus = data[#"swapaccepted"];
if ([swapStatus isEqual: #"Yes"]) {
[cell.displayedBar setImage:[UIImage imageNamed:#"greenbar.png"]];
cell.swapTitle.text = #"Accepted!";}
else {
if ([swapStatus isEqual: #""]) {
[cell.displayedBar setImage:[UIImage imageNamed:#"orangecellbar.png"]];
cell.swapTitle.text = #"You have a Request!";}
if ([swapStatus isEqual: #"Requested"]) {
[cell.displayedBar setImage:[UIImage imageNamed:#"orangecellbar.png"]];
cell.swapTitle.text = #"You have a Request!";}
if ([swapStatus isEqual: #"Cancelled"]) {
[cell.displayedBar setImage:[UIImage imageNamed:#"blueecellbar.png"]];
cell.swapTitle.text = #"Cancelled!";}
if ([swapStatus isEqual: #"No"]) {
[cell.displayedBar setImage:[UIImage imageNamed:#"redbar.png"]];
cell.swapTitle.text = #"Declined!";
}
}
return cell;
} else {
static NSString *ChatTableIdentifier = #"ChatTableViewCell";
ChatTableViewCell *cell = (ChatTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ChatTableIdentifier forIndexPath:indexPath];
NSString *userName = data[#"first name"];
cell.sendingUser.text = userName;
NSString *messageBody = data[#"body"];
cell.messageDisplayed.text = messageBody;
NSString *timeReceived = data[#"published at"];
cell.timeStamp.text = timeReceived;
NSString *userInfo = [self.userid objectForKey:#"first name"];
if ([cell.sendingUser.text isEqual: userInfo]) {
cell.messageDisplayed.textAlignment = NSTextAlignmentLeft;
cell.sendingUser.textAlignment = NSTextAlignmentLeft;
[cell.chatBubble setImage:[UIImage imageNamed:#"bubblegrey2.png"]];
} else {
cell.messageDisplayed.textAlignment = NSTextAlignmentRight;
cell.sendingUser.textAlignment = NSTextAlignmentRight;
[cell.chatBubble setImage:[UIImage imageNamed:#"bubbleorange2.png"]];
}
return cell;
}
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX)];
}
The problem is probably in your viewDidAppear, try replace:
[self.tableView setContentOffset:CGPointMake(0, CGFLOAT_MAX)];
with:
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self.messages count]-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
or properly calculate the height, probably it's:
self.tableView.contentView.height

IOS: [self.tableView reloadData] doestn't reload the data

I am studying IOS by some tutorial.After I input some text in searchBar and click search, it send Http Request and parse the JSON data ,then display in tableView, But when I input some text in searchBar then click search ,the tableView show nothing .while I type anything again in searchBar,the tableView content display.
My question is ,How can I show the content when the first time I click search but not type anything again? Thank you~~
Here is my code :
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
[searchBar resignFirstResponder];
searchResults = [NSMutableArray arrayWithCapacity:10];
isLoading =YES;
[self.tableView reloadData];
NSURL *url = [self urlWithSearchText: _searchBar.text];
NSString *jsonString = [self performStoreRequestwithUrl:url];
NSDictionary *dictionary = [self parseJSON: jsonString];
[self parseDictionary : dictionary];
[searchResults sortUsingSelector:#selector(compareName:)];
isLoading = NO;
[self.tableView reloadData];
}
- (NSInteger ) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (isLoading) {
return 1;
}else if (searchResults == nil) {
return 0;
}else if([searchResults count] == 0 ){
return 1;
}else{
return [searchResults count];
}
}
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (isLoading) {
return [self.tableView dequeueReusableCellWithIdentifier:LoadingCellIdentifier];
}
ResultCell *resultCell =(ResultCell *)[self.tableView
dequeueReusableCellWithIdentifier: #"ResultCell"];
UIImage *image = [UIImage imageNamed:#"TableCellGradient.png"];
UIImageView *backGroundView = [[UIImageView alloc] initWithImage: image];
UIImageView *selectedBackView = [[UIImageView alloc]initWithImage:
[UIImage imageNamed:#"SelectedTableCellGradient.png"]];
resultCell.backgroundView = backGroundView;
resultCell.selectedBackgroundView = selectedBackView;
if ([searchResults count]== 0) {
resultCell.nameLabel.text = #"Nothing Found";
resultCell.artistLabel.text = #"";
}else{
SearchResult * result = [searchResults objectAtIndex: indexPath.row];
resultCell.nameLabel.text = result.name;
NSString *kind = [self kindForDisplay:result.kind];
resultCell.artistLabel.text = [NSString stringWithFormat:#"%# (%#)",result.artistName,
kind];
}
return resultCell;
}

Parsing JSON to Table View error index (19) beyond bounds (19)

I'm parsing a JSON file to a table view in my iPhone app.
This is my code:
#import "DEMOSecondViewController.h"
#import "DEMONavigationController.h"
#import "PostsObject.h"
#import "RNBlurModalView.h"
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f
#define FONT_SIZE 14.0f
#interface DEMOSecondViewController ()
{
NSInteger refreshIndex;
NSArray *fbPost;
NSArray *pic;
NSArray *published;
}
#end
#implementation DEMOSecondViewController
#synthesize tweets;
#synthesize changeData;
- (void)refreshChannels:(id)sender {
if (tweets.count == 0) return;
// disable UI
self.title = #"Updating...";
self.navigationController.view.userInteractionEnabled = YES;
refreshIndex = 0;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = #"Posts";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:#"Menu"
style:UIBarButtonItemStylePlain
target:(DEMONavigationController *)self.navigationController
action:#selector(showMenu)];
self.myTableView.separatorColor = [UIColor clearColor];
changeData.selectedSegmentIndex = 0;
[changeData addTarget:self action:#selector(segmentedControlSelectedIndexChanged:) forControlEvents:UIControlEventValueChanged];
[self issueLoadRequest];
}
- (void)segmentedControlSelectedIndexChanged:(id)sender
{
[self issueLoadRequest];
}
#pragma mark - Table view data source
- (void)issueLoadRequest
{
if (changeData.selectedSegmentIndex == 0) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:#"website.php"]];
[self performSelectorOnMainThread:#selector(receiveData:) withObject:data waitUntilDone:YES];
});
} else if (changeData.selectedSegmentIndex == 1){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:#"website.php"]];
[self performSelectorOnMainThread:#selector(receiveData:) withObject:data waitUntilDone:YES];
});
} else if (changeData.selectedSegmentIndex == 2) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:#"website.php"]];
[self performSelectorOnMainThread:#selector(receiveData:) withObject:data waitUntilDone:YES];
});
}
}
- (void)receiveData:(NSData *)data {
if (changeData.selectedSegmentIndex == 0) {
self.tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
[self.myTableView reloadData];
} else if (changeData.selectedSegmentIndex == 1) {
self.tweets1 = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
[self.myTableView reloadData];
} else if (changeData.selectedSegmentIndex == 2) {
self.tweets2 = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
[self.myTableView reloadData];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (changeData.selectedSegmentIndex == 0) {
return self.tweets.count;
} else if (changeData.selectedSegmentIndex == 1) {
return self.tweets1.count;
} else {
return self.tweets2.count;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = #"PostsObject";
// The element in the array is going to be a dictionary. I JUST KNOW THIS. The key for the tweet is "text".
NSDictionary *tweet = [self.tweets objectAtIndex:indexPath.row];
NSDictionary *tweet1 = [self.tweets1 objectAtIndex:indexPath.row];
NSDictionary *tweet2 = [self.tweets2 objectAtIndex:indexPath.row];
PostsObject *cell = (PostsObject *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:#"PostsObject" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
if (changeData.selectedSegmentIndex == 0) {
cell.fbPost.text = [tweet objectForKey:#"message"];
cell.published.text = [tweet objectForKey:#"published"];
cell.pic.image = [UIImage imageNamed:#"facebook_icon.png"];
} else if (changeData.selectedSegmentIndex == 1) {
cell.fbPost.text = [tweet1 objectForKey:#"tweet"];
cell.published.text = [tweet1 objectForKey:#"posted"];
cell.pic.image = [UIImage imageNamed:#"twitter_icon.png"];
} else if (changeData.selectedSegmentIndex == 2) {
cell.fbPost.text = [tweet2 objectForKey:#"message"];
cell.published.text = [tweet objectForKey:#"published"];
cell.pic.image = [UIImage imageNamed:#"twitter_icon.png"];
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 96;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (changeData.selectedSegmentIndex == 0) {
//Öppna länken eller liknande
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString * storyLink = [[tweets objectAtIndex: storyIndex] objectForKey:#"message"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:storyLink]];
RNBlurModalView *modal = [[RNBlurModalView alloc] initWithViewController:self title:#"Message" message:storyLink];
[modal show];
// Spit out some pretty JSON for the tweet that was tapped. Neato.
NSString *formattedJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:[self.tweets objectAtIndex:indexPath.row] options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];
NSLog(#"tweet:\n%#", formattedJSON);
} else if (changeData.selectedSegmentIndex == 1) {
//Öppna länken eller liknande
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString * tweetLink = [[tweets objectAtIndex: tweetLink] objectForKey:#"tweet"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:tweetLink]];
RNBlurModalView *modal = [[RNBlurModalView alloc] initWithViewController:self title:#"Message" message:tweetLink];
[modal show];
// Spit out some pretty JSON for the tweet that was tapped. Neato.
NSString *formattedJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:[self.tweets objectAtIndex:indexPath.row] options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];
NSLog(#"tweet:\n%#", formattedJSON);
} else if (changeData.selectedSegmentIndex == 2) {
//Öppna länken eller liknande
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString * storyLink = [[tweets objectAtIndex: storyIndex] objectForKey:#"message"];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:storyLink]];
RNBlurModalView *modal = [[RNBlurModalView alloc] initWithViewController:self title:#"Message" message:storyLink];
[modal show];
// Spit out some pretty JSON for the tweet that was tapped. Neato.
NSString *formattedJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:[self.tweets objectAtIndex:indexPath.row] options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];
NSLog(#"tweet:\n%#", formattedJSON);
}
}
#end
When I launch the app I see that it parses the data correct to the table view. But when I begin to scroll down in the list the app crashes and gives me this strange error:
Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (19) beyond bounds (19)
Can someone please help me with this?
You shouldn't do this:
// The element in the array is going to be a dictionary. I JUST KNOW THIS. The key for the tweet is "text".
NSDictionary *tweet = [self.tweets objectAtIndex:indexPath.row];
NSDictionary *tweet1 = [self.tweets1 objectAtIndex:indexPath.row];
NSDictionary *tweet2 = [self.tweets2 objectAtIndex:indexPath.row];
because you can't guarantee that all of the arrays have the same number of items in them. Check your configuration attribute (selectedSegmentIndex) before trying to access only the appropriate array.

Resources