次のコード行を使用して、ユーザーの名簿に新しいバディを追加しようとしています。
XMPPJID jid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@localhost",
addBuddyTextField.text]];
[appDelegate.xmppRoster addUser:jid withNickname:addBuddyTextField.text];
これは機能します。他のユーザーはサブスクリプションリクエスト通知を受け取り、それを受け入れることができ、すべてが正常に機能します。新しいバディがに追加され、 NSArrayXMPPRosterMemoryStorage
に表示されるため、現在の名簿とすべてのバディをUIに表示できます。[XMPPRosterMemoryStorage unsortedUsers]
しかし、ユーザーがログアウトしてアプリケーションを再起動すると、彼が追加したすべての仲間とともに、名簿全体が消えます。[XMPPRoster fetchRoster]
次のメソッド[XMPPRosterMemoryStorage unsortedUsers]
は、アイテムが含まれていないNSArrayを返します。
バディの更新(追加、削除)をXMPPServerに投稿する必要がありますか?または、Rosterは私のXMPPserver(ejabberd)でサポートされていませんか?
XMPPRosterをアクティブ化するために使用するコードは次のとおりです。
xmppRosterMemStorage = [[XMPPRosterMemoryStorage alloc] init];
xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:xmppRosterMemStorage
dispatchQueue:dispatch_get_main_queue()];
[xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];
xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = false;
xmppRoster.autoFetchRoster = true;
[xmppRoster activate:xmppStream];
[xmppRoster fetchRoster];