realm 데이터베이스 개발 (2)

realm 데이터베이스 의 이론 지식 은 [realm 데이터 개발 (1)]http://www.jianshu.com/p/76b6d08d938e 결 과 를 보 여 주 었 습 니 다. 이 절 은 realm 데이터 뱅 크 의 사용 에 대해 서 만 설명 하고 추가, 삭제, 수정, 검사 합 니 다.
데이터베이스 경로 가 져 오기
기본 데이터베이스 가 져 오기
+(RLMRealm *)getDefaultRealm {
    defaultRealm = [RLMRealm defaultRealm];
    return defaultRealm;
}

지정 한 사용자 정의 데이터베이스
+(RLMRealm *)getCustomRealm{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *realmPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.realm",realmName]];
    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
    config.fileURL = [NSURL fileURLWithPath:path];
    config.objectClasses = @[KKExamRLMModel.class,KKInquiryRLMModel.class];
    config.readOnly = NO;
    config.schemaVersion = realmVersion;
    config.migrationBlock = ^(RLMMigration *migration , uint64_t oldSchemaVersion) {       //           block
        if (oldSchemaVersion < realmVersion) {
        }
    };
    [RLMRealmConfiguration setDefaultConfiguration:config];
    customRealm = [RLMRealm realmWithURL:[NSURL fileURLWithPath:realmPath]];
    return customRealm;
}

데이터 조회
/**
         
 @param descriptors    (RLMSortDescriptor  ,    nil  )
 @return       
 */
+(RLMResults *)getAllObjectsWithSortedDescriptors:(NSArray *)descriptors{
    RLMResults *results=nil;
       RLMRealm* realm=[self getCustomRealm];
        if (realm) {
            results=[self allObjectsInRealm:realm];
        }
    if (results&&descriptors) {
        results=[results sortedResultsUsingDescriptors:descriptors];
    }
    return results;
}

/**
         (            )
 @param keyPath      (      nil)
 @return       
 */
+(RLMResults *)getAllObjectSortedByKePath:(NSString *)keyPath ascending:(BOOL)ascending {
    RLMResults *results=nil;
        RLMRealm* realm=[self getCustomRealm];
        if (realm) {
            results=[self allObjectsInRealm:realm];
        }
    if (results&&keyPath) {
        results=[results sortedResultsUsingKeyPath:keyPath ascending:ascending];
    }
    return results;
}

/**
        (            )
 @param where        (              ,         nil  )
 @param descriptors    (RLMSortDescriptor  ,    nil  )
 @return    
 */
+(RLMResults *)getObjetctsWithWhere:(NSString *)where sortedDescriptors:(NSArray *)descriptors   {
    RLMResults *results=nil;
    RLMRealm* realm=nil;
     realm=[self getCustomRealm];
        if (realm) {
        results=[self objectsInRealm:realm where:where];
        }
    if (descriptors&&results) {
       results=[results sortedResultsUsingDescriptors:descriptors];
    }
    return results;
}

/**
        (            )
 @param where        (              ,         nil  )
 @param keyPath      (    nil  )
 @param ascending       
 @return    
 */
+(RLMResults *)getObjetctsWithWhere:(NSString *)where sortedByKePath:(NSString *)keyPath ascending:(BOOL)ascending {
    RLMResults *results=nil;
    RLMRealm* realm=nil;
        realm=[self getCustomRealm];
        if (realm) {
            results=[self objectsInRealm:realm where:where];
        }
    if (keyPath&&results) {
        results=[results sortedResultsUsingKeyPath:keyPath ascending:YES];
    }
    return results;
}

/**
          (            )
 @param predicate     
 @param descriptors    (RLMSortDescriptor  ,    nil  )
 @return    
 */
+(RLMResults *)getObjectWithPredicate:(NSPredicate *)predicate  sortedDescriptors:(NSArray *)descriptors {
    RLMRealm* realm=nil;
    RLMResults* results=nil;
        realm=[self getCustomRealm];
        if (realm) {
        results=[self objectsInRealm:realm withPredicate:predicate];
        }
    if (descriptors&&results) {
        results=[results sortedResultsUsingDescriptors:descriptors];
    }
    return results;
}

/**
          (            )
 @param predicate     
 @param keyPath      (    nil  )
 @param ascending       
 @return    
 */
+(RLMResults *)getObjectWithPredicate:(NSPredicate *)predicate  sortedByKePath:(NSString *)keyPath ascending:(BOOL)ascending {
    RLMRealm* realm=nil;
    RLMResults* results=nil;
        realm=[self getCustomRealm];
        if (realm) {
            results=[self objectsInRealm:realm withPredicate:predicate];
        }
    if (keyPath&&results) {
        results=[results sortedResultsUsingKeyPath:keyPath ascending:ascending];
    }
    return results;
}

데이터 의 증가 와 업데이트
/**
                 
 @param ojbect     
 @param block          beginWriteTransaction   。
 */
+(void)addorUpdateWithObject:(RLMObject *)ojbect afterBlock:(void (^)(void))block {
    RLMRealm* realm=nil;
        realm=[self getCustomRealm];
    if (realm) {
        [realm beginWriteTransaction];
        block();
        [realm addOrUpdateObject:ojbect];
        [realm commitWriteTransaction];
    }
}

/**
                
 @param objects    
 @param block          beginWriteTransaction   。
 */
+(void)addorUpdateWithObjects:(id)objects  afterBlock:(void (^)(void))block{
    RLMRealm* realm=nil;
    realm=[self getCustomRealm];
    if (realm) {
        [realm beginWriteTransaction];
        block();
        [realm addOrUpdateObjectsFromArray:objects];
        [realm commitWriteTransaction];
    }
    
}

/**
     (    )
 @param object          
 */
+(void)addSingleObject:(RLMObject *)object {
    RLMRealm* realm=nil;
        realm=[self getCustomRealm];
        [realm transactionWithBlock:^{
            [realm addObject:object];
            [realm commitWriteTransaction];
        }];
}

주의해 야 할 것 은 데이터 업 데 이 트 를 할 때 먼저 begin Write Transaction 을 한 다음 에 대상 의 속성 을 바 꿔 야 하기 때문에 after Block 이라는 반전 을 추가 하여 처리 해 야 합 니 다.
데이터 삭제
/**
       
 @param object     
 */
+(void)deleteObject:(RLMObject *)object {
    RLMRealm* realm=nil;
        realm=[self getCustomRealm];
    if (realm) {
        [realm transactionWithBlock:^{
            [realm deleteObject:object];
            [realm commitWriteTransaction];
        }];
    }
}


/**
     realm  
 @param objects realm     
 */
+(void)deleteObjects:(id)objects{
    RLMRealm* realm=nil;

        realm=[self getCustomRealm];
    if (realm) {
        [realm transactionWithBlock:^{
            [realm deleteObjects:objects];
            [realm commitWriteTransaction];
        }];
    }
}


/**
           
 @param predicate   
 */
+(void)deleteObjectsWithPredicate:(NSPredicate *)predicate  {
    RLMResults *objects = [self getObjectWithPredicate:predicate  sortedDescriptors:nil];
    if (objects&&objects.count>0) {
        [self deleteObjects:objects];
    }
}

/**
   where         
 @param where where   
 */
+(void)deleteObjectsWithWhere:(NSString *)where  {
    RLMResults *objects = [self getObjetctsWithWhere:where sortedDescriptors:nil];
    NSLog(@"objectCount:%ld",objects.count);
    if (objects&&objects.count>0) {
        [self deleteObjects:objects ];
    }
}


/**
            

 */
+(void)deleteAllObjects {
    RLMRealm *realm=nil;
    realm=[self getCustomRealm];
    if (realm) {
        [realm transactionWithBlock:^{
            [realm deleteAllObjects];
            [realm commitWriteTransaction];
        }];
    }
}

본 고 는 realm 대상 의 기본 클래스 를 패키지 하고 [realm 데이터베이스 개발 (3)]http://www.jianshu.com/p/1fe59ede20d6 ream 데이터베이스 의 구체 적 인 대상 을 추가 삭제 하고 검사 하 는 방법 으로 재 포장 합 니 다.

좋은 웹페이지 즐겨찾기