[iOS 개발] iOS 목록 페이지 데이터 관리

4181 단어
머리말
  • 모 바 일 개발 에서 리스트 데이터 의 전 시 를 피 할 수 없 을 것 이다.여 기 는 제 개인 iOS 개발 에서 겪 은 목록 데이터 관리 입 니 다.viewController 살 을 빼 는 과정 에서 얻 은 수확 으로 디자인 모델 을 고려 하지 않 습 니 다.더 좋 은 관리 방식 이 있다 면 교류 할 수 있 기 를 바 랍 니 다.감사합니다.

  • 처음
  • 개발 을 시 작 했 을 때 ViewController 에서 하나 NSMutableArraycurrentPage 의 모든 데이터 와 페이지 관리 가 ViewController 안에 놓 여 있어 데이터 가 복잡 하고 유지 하기 어려워 다시 사용 할 수 없다 고 밝 혔 다.

  • @property (nonatomic, copy) NSMutableArray *list; @property (nonatomic) NSInteger currentPage;
    2. 진일보: 일정한 시간 을 개발 한 후에
  • 한 동안 개발 한 후에 데 이 터 를 단독으로 관리 하고 ViewController 살 을 빼 는 동시에 데이터 의 실용성 을 높 여야 한 다 는 것 을 알 게 되 었 다.이 시기 에 하나의 DataList 데 이 터 를 관리 하고 데 이 터 를 분석 하 며 페이지 의 관 리 는 모두 하나의 데이터 류 에 단독으로 들어간다.
  • DataList 는 기본 클래스 로 서 구체 적 인 데이터 계승 DataList 은 해당 하 는 하위 클래스 를 생 성 한다. 예 를 들 어 사용자 목록 이 있 으 면 해당 하 는 것 은 하나 UserList 계승 DataList 이다.다음은 DataList 의 실현 이다.
  • DataList.h
    //
    //  DataList.h
    //  PageControlDemo
    //
    //  Created by brant on 2016/12/6.
    //  Copyright © 2016  wushujun. All rights reserved.
    //
    
    #import 
    
    @interface DataList : NSObject
    
    @property (nonatomic) NSInteger currentPage;            //     
    @property (nonatomic, strong) NSMutableArray *list;     //   list
    @property (nonatomic) BOOL haveMore;                    //       
    @property (nonatomic) BOOL isRefresh;                   //        ,       ,        
    
    /**
                   model   list 
     
                   ,          
     
     @param array       
     */
    - (void)loadDataFromArray:(NSArray *)array;
    
    /**
           
    
     @param index      
     @return         ,     nil
     */
    - (id)objectAtIndex:(NSInteger)index;
    
    /**
               
    
     @param object       
     */
    - (void)addObject:(id)object;
    
    /**
            
     */
    - (void)removeAll;
    
    @end
    

    DataList.m
    //
    //  DataList.m
    //  PageControlDemo
    //
    //  Created by brant on 2016/12/6.
    //  Copyright © 2016  wushujun. All rights reserved.
    //
    
    #import "DataList.h"
    
    @implementation DataList
    
    /**
                   model   list 
     
                   ,          
    
     @param array       
     */
    - (void)loadDataFromArray:(NSArray *)array {
        
        _currentPage++;
        
        //      ,     ,    
        if (_isRefresh) {
            [self removeAll];
            self.currentPage = 0; //        ,    1
        }
        
        if (array == nil || array.count <= 0) {
            _haveMore = NO;
            return;
        }
    }
    
    - (id)objectAtIndex:(NSInteger)index {
        if (self.list.count > index) {
            return self.list[index];
        }
        
        return nil;
    }
    
    - (void)addObject:(id)object {
        [self.list addObject:object];
    }
    
    - (void)removeAll {
        if (_list) {
            [_list removeAllObjects];
        }
    }
    
    # pragma mark - getters
    
    - (NSMutableArray *)list {
        if (!_list) {
            _list = [[NSMutableArray alloc] init];
        }
        
        return _list;
    }
    
    @end
    

    UserList. m Load 데 이 터 를 다시 쓰 는 방법
    //
    //  UserList.m
    //  PageControlDemo
    //
    //  Created by sjwu on 2016/12/6.
    //  Copyright © 2016  wushujun. All rights reserved.
    //
    
    #import "UserList.h"
    #import "User.h"
    
    @implementation UserList
    
    - (void)loadDataFromArray:(NSArray *)array {
        [super loadDataFromArray:array];
        
        //    array   
        if (array.count > 0) {
            for (NSDictionary *dic in array) {
                User *user = [User new];
                //      user   
                [user loadDataFromDictionary:dic];
                [self.list addObject:user];
            }
        }
    }
    
    @end
    

    3. 그리고 나중에...
  • 그 후에 각 노선 의 대신 들 은 각종 회전 model, model 회전 의 라 이브 러 리 를 썼 고 수 동 해석 model 은 다시 하지 않 았 다. 처음에 JSONModel 부터 최근 에 사용 한 YYModel 까지 이 라 이브 러 리 들 은 대부분의 분석 코드 를 줄 이 고 코드 를 판단 할 수 있다.
  • 개발 중 추천 YYModel, JSONModel 다 중 스 레 드 기록 시 동기 화 되 지 않 아 crash 가 발생 할 수 있 습 니 다.

  • (2017.03.05 업데이트)
    4. MVVM 모드, ViewModel 관리 페이지
  • 최근 프로젝트 에서 RAC 로 MVVM 프로젝트 구조 에 맞 춰 page 관 리 를 viewmodel 에 넣 었 습 니 다.개인 적 으로 리 스 텔 을 만들어 서 관리 하 는 게 좋 을 것 같 아 요.
  • 좋은 웹페이지 즐겨찾기