xmpp 정리 노트: 채 팅 메시지 전송 및 표시

5797 단어 XMPP
모든 정보의 발송 은 두 부분, 정보의 발송, 그리고 정보 가 인터페이스 에 표시 되 는 것 에 관심 을 가 져 야 한다.
이전 회고:
xmpp 정리 노트: 환경의 빠 른 설정 (설치 패키지 첨부)    http://www.cnblogs.com/dsxniubility/p/4304570.html
xmpp 정리 노트: xmppFramework 프레임 워 크 가 져 오기 및 소개    http://www.cnblogs.com/dsxniubility/p/4307057.html
xmpp 정리 노트: 사용자 네트워크 연결 및 친구 관리  http://www.cnblogs.com/dsxniubility/p/4307066.html
주의해 야 할 점:
채 팅 인터페이스 입력 상 자 는 textField 가 아니 라 textView 입 니 다. textView 는 여러 줄 의 정보 간 상하 스크롤 편집 을 제어 할 수 있 기 때 문 입 니 다. 위 챗 아래 채 팅 상자 가 일반적인 textField 를 사용 하면 어떤 상황 이 발생 할 지 상상 할 수 있 습 니 다.
시 뮬 레이 터 프로그램 으로 새끼 오리 와 채 팅 효과 그림 은 다음 과 같다.
만약 당신 이 동 백금 블 로그 원 에서 본문 을 보지 않 았 다 면 클릭 하여 원문 보기
xmpp整理笔记:聊天信息的发送与显示
 
하나.메시지 전송
일단 결과 스케줄 러 가 있어 야 돼 요.
이것 은 coredata 를 통 해 SQLlite 에서 데 이 터 를 추출 하 는 데 필요 한 작업 입 니 다.모든 코드 는 이 게 으 른 로드 에 쓰 여 있 습 니 다.
- (NSFetchedResultsController *)fetchedResultsController {

    //     ,       

    if (_fetchedResultsController != nil) {

        return _fetchedResultsController;

    }

    

    //            

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPMessageArchiving_Message_CoreDataObject"];

    

    //   

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];

    request.sortDescriptors = @[sort];

    

    //        ,          

    request.predicate = [NSPredicate predicateWithFormat:@"bareJidStr = %@", self.chatJID.bare];

    

    //                   

    NSManagedObjectContext *ctx = [SXXMPPTools sharedXMPPTools].xmppMessageArchivingCoreDataStorage.mainThreadManagedObjectContext;

    

    //    ,            

    _fetchedResultsController = [[NSFetchedResultsController alloc] 

      initWithFetchRequest:request managedObjectContext:ctx sectionNameKeyPath:nil cacheName:nil];

    _fetchedResultsController.delegate = self;

    

    return _fetchedResultsController;

}


 
결과 스케줄 러 를 쓴 후 viewdidload 페이지 의 첫 불 러 오기 에 한 마디 를 추가 해 야 합 니 다. 그렇지 않 으 면 일 을 하지 않 습 니 다.
//     

    [self.fetchedResultsController performFetch:NULL];


 
소식 을 보내다 
textView 에는 textField 와 같은 shouldReturn 방법 이 없어 서 메 시 지 를 직접 보 냅 니 다.
그래서 textView 의 '프 록 시 방법의 텍스트 변경 방법' 을 조금 만 처리 하여 텍스트 발송 의 목적 을 달성 할 수 있 습 니 다.
#pragma mark - ******************** textView    

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

{

    //            。

    if ([text isEqualToString:@"
"]) { // , 。 [self sendMessage:textView.text]; self.textView.text = nil; return NO; } return YES; }

 입력 할 때 Enter 키 를 누 르 면 프 록 시 방법 으로 들 어 오 는 이 문 자 는 '' 입 니 다. 자신 이 쓴 이 sendmessage 방법 을 호출 하여 문자열 을 직접 보 냅 니 다.
 
이 방법 은 내부 에 들 어 오 는 텍스트 를 먼저 addBody 를 사용 한 다음 에 자신 이 직접 쓴 단일 예 류 의 xmpp 로 보 냅 니 다.
#pragma mark - ********************       

/**      */

- (void)sendMessage:(NSString *)message

{

    XMPPMessage *msg = [XMPPMessage messageWithType:@"chat" to:self.chatJID];

    

    [msg addBody:message];

    

    [[SXXMPPTools sharedXMPPTools].xmppStream sendElement:msg];

}


 
둘.tableView 에 정보 표시
tableView 의 데이터 원본 방법 에서 먼저 데이터베이스 에서 현재 정 보 를 꺼 낸 다음 에 보 낸 것 인지 받 은 것 인지 판단 합 니 다.다시 사용 할 수 있 는 식별 자 를 가 져 온 다음 값 을 부여 합 니 다.
    //         

    XMPPMessageArchiving_Message_CoreDataObject *message = [self.fetchedResultsController objectAtIndexPath:indexPath];

//              

    NSString *ID = ([message.outgoing intValue] == 1) ? @"SendCell" : @"ReciveCell" ;

    SXChatCell *cell = [tableview dequeueReusableCellWithIdentifier:ID];

    cell.messageLabel.text = message.body;


 그 중에서 sx 에서 열 린 클래스 이름 은 모두 제 가 사용자 정의 클래스 이 고 그 안 은 모두 일반적인 문법 입 니 다.
 
위 에서 언급 한 도구 류 SXXmppTools 에서 이 모듈 은 사용 해 야 할 속성 과 방법 이 있 습 니 다.
/** xmpp  */

@property(nonatomic,strong,readonly) XMPPStream * xmppStream;

/**      */

@property (nonatomic, strong, readonly) XMPPMessageArchiving *xmppMessageArchiving;

/**        */

@property (nonatomic, strong, readonly) XMPPMessageArchivingCoreDataStorage *xmppMessageArchivingCoreDataStorage;





+ (instancetype)sharedXMPPTools;

 
여기 주의 할 점 이 있 는데,
기본 적 인 상황 에서 친구 의 채 팅 페이지 에 들 어가 면 모든 친구 와 의 채 팅 기록 이 표 시 됩 니 다.같은 데이터 시트 에 존재 하기 때문에 필 터 를 해 야 합 니 다. 게 으 름 피 우 는 코드 입 니 다.
//        ,          

    request.predicate = [NSPredicate predicateWithFormat:@"bareJidStr = %@", self.chatJID.bare];


 만약 당신 이 동 백금 블 로그 원 에서 본문 을 보지 않 았 다 면  클릭 하여 원문 보기
오디 오 파일 과 그림 파일 을 보 내 는 방법 을 정리 하고 있 습 니 다. 관심 있 는 사람 은 저 를 주목 하 세 요.

좋은 웹페이지 즐겨찾기