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 를 사용 하면 어떤 상황 이 발생 할 지 상상 할 수 있 습 니 다.
시 뮬 레이 터 프로그램 으로 새끼 오리 와 채 팅 효과 그림 은 다음 과 같다.
만약 당신 이 동 백금 블 로그 원 에서 본문 을 보지 않 았 다 면 클릭 하여 원문 보기
하나.메시지 전송
일단 결과 스케줄 러 가 있어 야 돼 요.
이것 은 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];
만약 당신 이 동 백금 블 로그 원 에서 본문 을 보지 않 았 다 면 클릭 하여 원문 보기
오디 오 파일 과 그림 파일 을 보 내 는 방법 을 정리 하고 있 습 니 다. 관심 있 는 사람 은 저 를 주목 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
XMPP SSO(Single Sign-On)JID의 리소스가 부족하면 로그인 후 XMPP 서버에 tigase-10과 같은 리소스가 자동으로 할당됩니다.XMPP는 다중 로그인을 지원하기 때문에 서로 다른 클라이언트가 같은 JID로 로그인하면 서버는 모든 클라이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.