Index: src/XMPPRoster.h ================================================================== --- src/XMPPRoster.h +++ src/XMPPRoster.h @@ -71,10 +71,11 @@ /// \cond internal XMPPConnection *connection; OFMutableDictionary *rosterItems; XMPPMulticastDelegate *delegates; id dataStorage; + BOOL rosterRequested; /// \endcond } #ifdef OF_HAVE_PROPERTIES /** Index: src/XMPPRoster.m ================================================================== --- src/XMPPRoster.m +++ src/XMPPRoster.m @@ -27,10 +27,12 @@ #define XMPP_ROSTER_M #include +#import + #import "XMPPRoster.h" #import "XMPPRosterItem.h" #import "XMPPConnection.h" #import "XMPPIQ.h" #import "XMPPJID.h" @@ -71,10 +73,12 @@ } - (void)requestRoster { XMPPIQ *iq; + + rosterRequested = YES; iq = [XMPPIQ IQWithType: @"get" ID: [connection generateStanzaID]]; [iq addChild: [OFXMLElement elementWithName: @"query" namespace: XMPP_NS_ROSTER]]; @@ -186,11 +190,13 @@ [delegates removeDelegate: delegate]; } - (void)setDataStorage: (id )dataStorage_ { - /* TODO: Prevent changing it after it has been used */ + if (rosterRequested) + @throw [OFInvalidArgumentException exceptionWithClass: isa]; + dataStorage = dataStorage_; } - (id )dataStorage {