// // RQHomePageSubjectOneOrFourViewModel.m // SDJK // // Created by 张嵘 on 2021/7/29. // #import "RQHomePageSubjectOneOrFourViewModel.h" #import "LightingAndSoundVC.h" #import "TRDetailVC.h" @interface RQHomePageSubjectOneOrFourViewModel () @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType; @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType; @property (nonatomic, readwrite, strong) RQTreeListModel *treeListModel; @property (nonatomic, readwrite, copy) NSArray *subjectTwoArr; @property (nonatomic, readwrite, copy) NSArray *subjectThreeArr; @property (nonatomic, readwrite, copy) NSArray *currentVideosArr; @end @implementation RQHomePageSubjectOneOrFourViewModel #pragma mark - Public Method - (instancetype)initWithServices:(id)services params:(NSDictionary *)params { if (self = [super initWithServices:services params:params]) { self.homePageCarType = [params[RQHomePageCarTypeKey] integerValue]; self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue]; } return self; } - (void)initialize { [super initialize]; self.title = @""; // [self getVideos]; ///配置数据 // [self rq_configureData]; [self rq_configureData0]; } #pragma mark - PrivateMethod - (void)rq_configureData { @weakify(self) /// 当前科目 NSString *subjectStr = (self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectThree)? @"科目三" : (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"科目二" : @"科目一"); __block NSMutableArray *mutableArrr = @[].mutableCopy; /// 第零组 RQCommonGroupViewModel *group0; RQCommonGroupViewModel *group2 = [RQCommonGroupViewModel groupViewModel]; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { group0 = [[RQHomeSubPageToolBarOneGroupViewModel alloc] initWithRQHomePageSubjectType:self.homePageSubjectType]; group0.footerHeight = (RQ_SCREEN_WIDTH - (16 * 3)) / 4.f * (6.f / 4.f); if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { group2.itemViewModels = [self.subjectTwoArr.rac_sequence map:^id _Nullable(NSString *titleStr) { @strongify(self) RQHomeSubPageNormalItemViewModel *item = [[RQHomeSubPageNormalItemViewModel alloc] init]; item.icon = @"subject2_standart_icon"; item.title = titleStr; item.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, 44.f); item.bottomLineHide = [self.subjectTwoArr indexOfObject:titleStr] == self.subjectTwoArr.count + 1; item.operation = ^{ @strongify(self) TRDetailVC *vc=[[TRDetailVC alloc]init]; [vc setFile:titleStr]; [self navPushHideTabbarToVC:vc]; }; return item; }].array; } else { group2.itemViewModels = [self.subjectThreeArr.rac_sequence map:^id _Nullable(NSString *titleStr) { @strongify(self) RQHomeSubPageNormalItemViewModel *item = [[RQHomeSubPageNormalItemViewModel alloc] init]; item.icon = @"subject2_standart_icon"; item.title = titleStr; item.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, 44.f); item.bottomLineHide = [self.subjectThreeArr indexOfObject:titleStr] == self.subjectTwoArr.count + 1; item.operation = ^{ @strongify(self) TRDetailVC *vc=[[TRDetailVC alloc]init]; [vc setFile:titleStr]; [self navPushHideTabbarToVC:vc]; }; return item; }].array; } } else { group0 = [RQHomeSubPageToolBarGroupViewModel groupViewModel]; group0.footerHeight = RQ_FIT_HORIZONTAL(65.f); } group0.headerHeight = RQ_SHARE_FUNCTION.RQADViewHeight; RQHomeSubPageItemViewModel *homeSubPageItemViewModel = [[RQHomeSubPageItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType]; homeSubPageItemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, RQ_FIT_HORIZONTAL(359.f)); homeSubPageItemViewModel.operation = ^{ }; RQCommonGroupViewModel *group3 = [RQCommonGroupViewModel groupViewModel]; group3.headerHeight = 10.f; group3.headerHeight = 10.f; RQHomeSubPageNormalItemViewModel *item0 = [[RQHomeSubPageNormalItemViewModel alloc] init]; item0.icon = @"subject3_light_ico"; item0.title = @"灯光操作"; item0.itemSize = CGSizeMake(RQ_SCREEN_WIDTH / 2.f - 8.f, 54.f); item0.operation = ^{ LightingAndSoundVC *VC = [[LightingAndSoundVC alloc] init]; VC.styleTag = 4; [self navPushHideTabbarToVC:VC]; }; item0.bottomLineHide = YES; RQHomeSubPageNormalItemViewModel *item1 = [[RQHomeSubPageNormalItemViewModel alloc] init]; item1.icon = @"subject3_voice_icon"; item1.title = @"语音模拟"; item1.itemSize = CGSizeMake(RQ_SCREEN_WIDTH / 2.f - 8.f, 54.f); item1.bottomLineHide = YES; item1.operation = ^{ LightingAndSoundVC *VC = [[LightingAndSoundVC alloc] init]; VC.styleTag = 5; [self navPushHideTabbarToVC:VC]; }; group3.itemViewModels = @[item0, item1]; /// 数据源 RAC(self, dataSource) = [RACObserve(RQ_COMMON_MANAGER, treeListArr) map:^(NSArray * treeListModelArr) { @strongify(self) if (RQObjectIsNil(treeListModelArr)) { group0.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[] : @[homeSubPageItemViewModel]; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { return @[group0, group2]; } else if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree) { return @[group0, group3, group2]; } else { return @[group0]; } } if (treeListModelArr.count > 0) { /// 第一组 RQHomeSubPageVideoHeaderGroupViewModel *group1 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel]; group1.headerHeight = 48.f; group1.footerHeight = CGFLOAT_MIN; group1.header = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"基础操作视频" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四视频教程" : @"科目一视频教程"); __block NSInteger scrollItemSection; NSArray *arr = [[treeListModelArr.rac_sequence filter:^BOOL(RQTreeListModel *treeListModel) { return [treeListModel.typeName isEqualToString:subjectStr]; }].array.rac_sequence map:^id _Nullable(RQTreeListModel *treeListModel) { self.treeListModel = treeListModel; group1.treeListModel = treeListModel; group1.homePageSubjectType = self.homePageSubjectType; return [treeListModel.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItem) { NSInteger section = [treeListModel.children indexOfObject:childrenItem]; if (childrenItem.videos.count > 0) { return [self dataSourceWithItems:childrenItem.videos treeListModel:treeListModel section:section]; } else { if ([childrenItem.typeName isEqualToString:@"基础操作"]) { return [childrenItem.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItemA) { group1.mySection = section; return [self dataSourceWithItems:childrenItemA.videos treeListModel:treeListModel section:section]; }].array; } else { scrollItemSection = section; NSArray *arrr = [childrenItem.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItemA) { if (childrenItemA.videos.count > 0) { return childrenItemA; } else { return nil; } }].array; [mutableArrr addObjectsFromArray:arrr]; return nil; } } }].array; }].array; [self dataDealWithDataArr:arr completion:^(NSArray *arr) { group1.itemViewModels = arr; }]; RQHomeSubPageVideoScrollItemViewModel *homeSubPageVideoScrollItemViewModel = [[RQHomeSubPageVideoScrollItemViewModel alloc] initWithChildrenItemArr:mutableArrr.copy treeListModel:self.treeListModel homePageSubjectType:self.homePageSubjectType section:scrollItemSection]; homeSubPageVideoScrollItemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, RQ_FIT_HORIZONTAL(239.f)); homeSubPageVideoScrollItemViewModel.operation = ^{ }; group0.itemViewModels = @[(self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? homeSubPageVideoScrollItemViewModel : homeSubPageItemViewModel]; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { return group1.itemViewModels.count > 0? @[group0, group1, group2] : @[group0, group2]; } else if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree) { return group1.itemViewModels.count > 0? @[group0, group1, group3, group2] : @[group0, group3 ,group2]; } else { return group1.itemViewModels.count > 0? @[group0, group1] : @[group0]; } } else { if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { return @[group0, group2]; } else if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree) { return @[group0, group3, group2]; } else { return @[group0]; } } }]; } - (void)rq_configureData0 { @weakify(self) /// 第零组 RQCommonGroupViewModel *group0; RQCommonGroupViewModel *group2 = [RQCommonGroupViewModel groupViewModel]; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { group0 = [[RQHomeSubPageToolBarOneGroupViewModel alloc] initWithRQHomePageSubjectType:self.homePageSubjectType]; group0.footerHeight = (RQ_SCREEN_WIDTH - (16 * 3)) / 4.f * (6.f / 4.f); if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { group2.itemViewModels = [self.subjectTwoArr.rac_sequence map:^id _Nullable(NSString *titleStr) { @strongify(self) RQHomeSubPageNormalItemViewModel *item = [[RQHomeSubPageNormalItemViewModel alloc] init]; item.icon = @"subject2_standart_icon"; item.title = titleStr; item.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, 44.f); item.bottomLineHide = [self.subjectTwoArr indexOfObject:titleStr] == self.subjectTwoArr.count + 1; item.operation = ^{ @strongify(self) TRDetailVC *vc=[[TRDetailVC alloc]init]; [vc setFile:titleStr]; [self navPushHideTabbarToVC:vc]; }; return item; }].array; } else { group2.itemViewModels = [self.subjectThreeArr.rac_sequence map:^id _Nullable(NSString *titleStr) { @strongify(self) RQHomeSubPageNormalItemViewModel *item = [[RQHomeSubPageNormalItemViewModel alloc] init]; item.icon = @"subject2_standart_icon"; item.title = titleStr; item.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, 44.f); item.bottomLineHide = [self.subjectThreeArr indexOfObject:titleStr] == self.subjectTwoArr.count + 1; item.operation = ^{ @strongify(self) TRDetailVC *vc=[[TRDetailVC alloc]init]; [vc setFile:titleStr]; [self navPushHideTabbarToVC:vc]; }; return item; }].array; } } else { group0 = [RQHomeSubPageToolBarGroupViewModel groupViewModel]; group0.footerHeight = RQ_FIT_HORIZONTAL(65.f); } group0.headerHeight = RQ_SHARE_FUNCTION.RQADViewHeight; RQHomeSubPageItemViewModel *homeSubPageItemViewModel = [[RQHomeSubPageItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType]; homeSubPageItemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, RQ_FIT_HORIZONTAL(359.f)); homeSubPageItemViewModel.operation = ^{ }; group0.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[] : @[homeSubPageItemViewModel]; RQCommonGroupViewModel *group3 = [RQCommonGroupViewModel groupViewModel]; group3.headerHeight = 10.f; group3.headerHeight = 10.f; RQHomeSubPageNormalItemViewModel *item0 = [[RQHomeSubPageNormalItemViewModel alloc] init]; item0.icon = @"subject3_light_ico"; item0.title = @"灯光操作"; item0.itemSize = CGSizeMake(RQ_SCREEN_WIDTH / 2.f - 8.f, 54.f); item0.operation = ^{ LightingAndSoundVC *VC = [[LightingAndSoundVC alloc] init]; VC.styleTag = 4; [self navPushHideTabbarToVC:VC]; }; item0.bottomLineHide = YES; RQHomeSubPageNormalItemViewModel *item1 = [[RQHomeSubPageNormalItemViewModel alloc] init]; item1.icon = @"subject3_voice_icon"; item1.title = @"语音模拟"; item1.itemSize = CGSizeMake(RQ_SCREEN_WIDTH / 2.f - 8.f, 54.f); item1.bottomLineHide = YES; item1.operation = ^{ LightingAndSoundVC *VC = [[LightingAndSoundVC alloc] init]; VC.styleTag = 5; [self navPushHideTabbarToVC:VC]; }; group3.itemViewModels = @[item0, item1]; RAC(self, dataSource) = [RACObserve(self, currentVideosArr) map:^(NSArray * treeListModelArr) { @strongify(self) if (self.currentVideosArr.count > 0) { /// 第一组 RQHomeSubPageVideoHeaderGroupViewModel *group1 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel]; group1.headerHeight = 48.f; group1.footerHeight = CGFLOAT_MIN; group1.header = @"视频教程"; group1.itemViewModels = [self dataSourceWithItems:self.currentVideosArr treeListModel:nil section:1]; group1.currentVideoesArr = self.currentVideosArr; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { return group1.itemViewModels.count > 0? @[group0, group1, group2] : @[group0, group2]; } else if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree) { return group1.itemViewModels.count > 0? @[group0, group1, group3, group2] : @[group0, group3 ,group2]; } else { return group1.itemViewModels.count > 0? @[group0, group1] : @[group0]; } } else { if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { return @[group0, group2]; } else if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree) { return @[group0, group3, group2]; } else { return @[group0]; } } }]; } - (void)dataDealWithDataArr:(NSArray *)dataArr completion:(void (^)(NSArray *arr))completion { if (dataArr.count > 0) { for (id value in dataArr) { if ([value isKindOfClass:[NSArray class]]) { [self dataDealWithDataArr:value completion:completion]; break; } else { completion(dataArr); break; } } } else { completion(dataArr); } } - (NSArray *)dataSourceWithItems:(NSArray *)items treeListModel:(RQTreeListModel *)treeListModel section:(NSInteger)section { NSArray *viewModels = [items.rac_sequence map:^(VideosItem *videosItem) { RQHomeSubPageVideoItemViewModel *homeSubPageVideoItemViewModel = [[RQHomeSubPageVideoItemViewModel alloc] initWithVideosItem:videosItem]; CGFloat cellWidth = (RQ_SCREEN_WIDTH - (16 * 3)) / 2.f; homeSubPageVideoItemViewModel.itemSize = CGSizeMake(cellWidth, cellWidth * (122.f / 167.f)); homeSubPageVideoItemViewModel.operation = ^{ RQVideoDetailViewModel *videoDetailViewModel = [[RQVideoDetailViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{ RQViewModelUtilKey : treeListModel? treeListModel : self.currentVideosArr, RQVideoItemIndexKey : @(0), RQVideoItemIndexPathKey : [NSIndexPath indexPathForRow:[items indexOfObject:videosItem] inSection:section], RQHomePageSubjectTypeKey : @(self.homePageSubjectType), }]; [RQ_APPDELEGATE.services pushViewModel:videoDetailViewModel animated:YES]; }; return homeSubPageVideoItemViewModel; }].array; return viewModels ?: @[]; } - (void)getVideos { if (![Util connectedToNetWork]) { showMsgUnconnect(); return; } NSMutableArray *aArray=[NSMutableArray array]; [aArray addPro:@"chapterId" Value:[NSString stringWithFormat:@"%ld",self.homePageSubjectType + 1]]; [aArray addPro:@"subject" Value:[NSString stringWithFormat:@"%ld",self.homePageSubjectType + 1]]; [aArray addPro:@"isPage" Value:@"0"]; [aArray addPro:@"pageSize" Value:@"0"]; [aArray addPro:@"currentPage" Value:@"0"]; NSString* method = @"getVideos"; [jiaPeiManager requestAnythingWithURL:method array:aArray data:nil completion:^(NSDictionary *root) { NSDictionary *dic = @{ @"body": @[@{ @"chapter": @"1", @"content": @"交通信号灯", @"crdate": @"", @"id": @"19", @"image": @"http://lnxzzfile.oss-cn-beijing.aliyuncs.com/public/video/170906/1-1.jpg", @"playNum": @"", @"source": @"网络", @"subject": @"1", @"taglib": @"交通信号灯", @"times": @"400", @"title": @"【理论】交通信号灯_学车视频", @"vHtml": @"", @"videoPath": @"http://218.60.2.75:8081/sp/upload/1/1-1.mp4", @"videoType": @"1" }, @{ @"chapter":@"1", @"content":@"交通标志", @"crdate":@"", @"id":@"20", @"image":@"http://lnxzzfile.oss-cn-beijing.aliyuncs.com/public/video/170906/1-2.jpg", @"playNum":@"", @"source":@"网络", @"subject":@"1", @"taglib":@"交通标志", @"times":@"1566", @"title":@"【理论】交通标志_ 学车视频", @"vHtml":@"", @"videoPath":@"http://218.60.2.75:8081/sp/upload/1/1-2.mp4", @"videoType":@"1" }, @{ @"chapter":@"1", @"content":@"交通标线", @"crdate":@"", @"id":@"21", @"image":@"http://lnxzzfile.oss-cn-beijing.aliyuncs.com/public/video/170906/1-3.jpg", @"playNum":@"", @"source":@"网络", @"subject":@"1", @"taglib":@"交通标线", @"times":@"548", @"title":@"【理论】交通标线_学车视频", @"vHtml":@"", @"videoPath":@"http://218.60.2.75:8081/sp/upload/1/1-3.mp4", @"videoType":@"1" }, @{ @"chapter":@"1", @"content":@"交通警察指挥手势信号", @"crdate":@"", @"id":@"22", @"image":@"http://lnxzzfile.oss-cn-beijing.aliyuncs.com/public/video/170906/1-4.jpg", @"playNum":@"", @"source":@"网络", @"subject":@"1", @"taglib":@"交通警察指挥手势信号", @"times":@"767", @"title":@"【理论】交通警察指挥手势信号_学车视频", @"vHtml":@"", @"videoPath":@"http://218.60.2.75:8081/sp/upload/1/1-4.mp4", @"videoType":@"1" }], @"code":@"0", @"msg":@"", @"other":@"" }; // root = dic; if (!root) { return ; } if ([root[@"code"] isEqualToString:@"1"]) { ShowMsg(root[@"body"]); return; } if ([root[@"body"] isKindOfClass:[NSArray class]]) { NSMutableArray *arr = @[].mutableCopy; for (NSDictionary *dic in root[@"body"]) { VideosItem *videoItem = [VideosItem videoItemModelWithDictionary:dic]; if (arr.count < 4) { [arr addObject:videoItem]; } } self.currentVideosArr = arr.copy; } }]; } - (void)navPushHideTabbarToVC:(UIViewController *)vc { if (RQ_COMMON_MANAGER.YYXC_SERVICE_OPEN) { [RQControllerHelper.topNavigationController qmui_pushViewController:vc animated:YES completion:nil]; } else { vc.hidesBottomBarWhenPushed = YES; [RQControllerHelper.topNavigationController qmui_pushViewController:vc animated:YES completion:nil]; vc.hidesBottomBarWhenPushed = NO; } } - (NSArray *)subjectTwoArr { NSArray *arr = @[@"科目二小错误千万别大意", @"科目二到底考什么?全部都在这", @"科目二考试不过的原因大解析", @"侧方停车只是倒车速度慢一点,为什么判不过?", @"考官说扣分:“驾考科目二场考五项讲解全攻略”", @"科目二考试技巧口诀,小伙伴要记牢哦", @"科目二考试详细流程", @"科目二之直角拐弯", @"科目二考场温馨提示要点图", @"侧方停车技巧,超详细!", @"四张图让你秒变倒车界的独孤求败!", @"倒车入库再也不发愁,蜀黍教你各种倒车技巧!", @"科目二五项过关神技巧,超级详细!", @"因为这些挂掉,冤枉死!", @"科目二坡道,这些不良动作是你考试不过关的根源!", @"倒车入位用这三招,想怎么钻就怎么钻!", @"科目二失分点都在这,想过来看!", @"倒车入库究竟有多难?", @"学车入门级知识问题", @"科二全程解剖,让“菜鸟级”的你轻松通过考试", @"直角转弯操作技巧,一看秒懂", @"六张图,教会你“侧方停车”神技能", @"全程考试技巧汇总", @"坡道定点停车技巧(图解)", @"坡道定点找三十公分线的技巧方法", @"考驾照14条关键经验,学员含泪总结", @"科目二考前准备", @"科目二合格标准", @"科目二必过考试经验分享", @"坡道起步怎么预防倒溜和熄火?", @"科目二全程“难点”独家解析!", @"科二最难的:倒车入口+坡道起步独家秘笈", @"你必须注意的科目二考试须知!"]; NSMutableArray *array = [NSMutableArray arrayWithArray:arr]; NSMutableArray *dataArray = [NSMutableArray array]; for (int i = 0; i < 6; i ++) { int index = arc4random()%(array.count - 1); [dataArray addObject:array[index]]; [array removeObjectAtIndex:index]; } return @[]; return dataArray.copy; } - (NSArray *)subjectThreeArr { NSArray *arr = @[@"科目三考试评判标准,提前了解不失分", @"科目三原来是这样丢分的", @"三招提高科目三考试成功率", @"科目三考试详细流程", @"科三再升级“人考”改“机考”车内多名安全员", @"科目三--加减档位操作", @"夜考,用这几招轻轻松松过", @"科目三大路考之靠边停车小技巧", @"科目三:模拟夜间行驶场景灯光使用技巧", @"超详细科目三考试口令速记口诀!", @"控制科目三方向的几个生死关键点", @"2015年科目三考试新规则和扣分标准", @"科目三:路考超车须知", @"科目三:电子路考需要注意什么", @"科目三:老手教你靠边停车技术", @"科目三:路考变更车道须知", @"科目三:路考通过人行横道线须知", @"科目三:路考中14项细节必需注意", @"考试指南 - 科目三路考评判标准", @"考试指南 - 科目三路考秘诀", @"考试指南 - 科目三必过的考场经验分享", @"考试指南 - 科目三抽到夜间考试怎么办?", @"考试指南 - 夜考灯光使用攻略,看完就过了!", @"考试指南 - 科目三路考会车攻略"]; NSMutableArray *array = [NSMutableArray arrayWithArray:arr]; NSMutableArray *dataArray = [NSMutableArray array]; for (int i = 0; i < 5; i ++) { int index = arc4random()%(array.count - 1); [dataArray addObject:array[index]]; [array removeObjectAtIndex:index]; } return @[]; return dataArray.copy; } @end