下面是每次收到揚聲器信息時調用的方法。NSMutableDictionary在實例化並初始化後仍然爲零
- (void)handleGroupingFromReceivedSpeakerInfo:(SpeakerInfo *)speakerInfo
{
GroupInfo *groupInfo = [_IP_GroupInfo_Map objectForKey:speakerInfo.mGroupIP];
if(groupInfo == nil)
{
groupInfo = [[GroupInfo alloc] init];
groupInfo.mIP = speakerInfo.mGroupIP;
groupInfo.isTemp = YES;
NSLog(@"HandleGrouping: New temp group %@", groupInfo.mIP);
}
if(groupInfo.isTemp)
{
if(![groupInfo.mSpeakerIDList containsObject:[@(speakerInfo.mID) stringValue]])
{
[groupInfo.mSpeakerIDList addObject:[@(speakerInfo.mID) stringValue]];
NSLog(@"HandleGrouping: added new member with id %@ temp group with ip %@", [@(speakerInfo.mID) stringValue], groupInfo.mIP);
[_IP_GroupInfo_Map setObject:groupInfo forKey:groupInfo.mIP];
}
}
}
現在我來解釋一下代碼的作用。
每當接收到一個揚聲器的信息,它會得到與密鑰獲得的存儲
GroupInfo
,speakerInfo.mGroupIP如果GROUPINFO是零那麼簡單的實例化一個新的,然後將揚聲器信息的ID添加到groupInfo
如果不是那麼去並添加speakerInfo到現有
GroupInfo
好吧,這裏的問題,看看日誌(請不要介意其他日誌消息,只有開頭的一個「HandleGrouping:」 ):
Discovered speaker with id 6494094734139439904
2015-08-28 17:41:53.756 soulbeats[13558:3307] Added speakerID: 6494094734139439904 to AllSpeakersIDList
2015-08-28 17:41:53.758 soulbeats[13558:1803] Discovered speaker with id 72243140485806144
2015-08-28 17:41:53.763 soulbeats[13558:3307] Old speaker info is null
2015-08-28 17:41:53.765 soulbeats[13558:1803] Added speakerID: 72243140485806144 to AllSpeakersIDList
2015-08-28 17:41:53.770 soulbeats[13558:3307] HandleGrouping: New temp group 239.11.11.12
2015-08-28 17:41:53.772 soulbeats[13558:1803] Old speaker info is null
2015-08-28 17:41:53.777 soulbeats[13558:3307] HandleGrouping: added new member with id 6494094734139439904 temp group with ip 239.11.11.12
2015-08-28 17:41:53.779 soulbeats[13558:1803] HandleGrouping: New temp group 239.11.11.12
2015-08-28 17:41:53.785 soulbeats[13558:3307] Discovered speaker with id 7782687177520836128
2015-08-28 17:41:53.788 soulbeats[13558:1803] HandleGrouping: added new member with id 72243140485806144 temp group with ip 239.11.11.12
2015-08-28 17:41:53.794 soulbeats[13558:3307] Added speakerID: 7782687177520836128 to AllSpeakersIDList
2015-08-28 17:41:53.802 soulbeats[13558:3307] Old speaker info is null
2015-08-28 17:41:53.807 soulbeats[13558:3307] HandleGrouping: added new member with id 7782687177520836128 temp group with ip 239.11.11.12
2015-08-28 17:41:55.711 soulbeats[13558:60b] SendBrowseCmd: browse again!!!
2015-08-28 17:41:55.719 soulbeats[13558:60b] SendBrowseCmd: refresh!!!
2015-08-28 17:41:55.721 soulbeats[13558:60b] Refresh: found one temp group with ip 239.11.11.12 with speakerIDListCount 2
正如從上面可以看到的,GROUPINFO被實例化兩次。您可以看到日誌消息「New temp group 239.11.11.12」出現TWICE。
2015-08-28 17:41:53.770 soulbeats[13558:3307] HandleGrouping: New temp group 239.11.11.12
2015-08-28 17:41:53.772 soulbeats[13558:1803] Old speaker info is null
2015-08-28 17:41:53.777 soulbeats[13558:3307] HandleGrouping: added new member with id 6494094734139439904 temp group with ip 239.11.11.12
2015-08-28 17:41:53.779 soulbeats[13558:1803] HandleGrouping: New temp group 239.11.11.12
我不明白爲什麼會發生這種情況。我使用相同的密鑰獲取groupInfo對象,這是收到的speakerInfo的ip,239.11.11.12。所以我期待在第一次調用這個方法時,groupInfo應該是零。但在此之後,由於我已經在其中添加了speakerInfo.mID並將其重新設置爲字典,因此下次調用此方法時groupInfo不應該爲零。
其他信息:
我宣佈的NSMutableDictionary這樣:
@property (nonatomic, strong) NSMutableDictionary *IP_GroupInfo_Map;
有什麼事要解決這個問題?請幫忙。非常感謝。
---------更新:新增的NSLog(@ 「%@」,個體經營)--------------
2015-08-28 18:41:28.497 soulbeats[13652:5d03] Discovered speaker with id 7782687177520836128
2015-08-28 18:41:28.505 soulbeats[13652:1803] <MultiroomPlay: 0x1760ba90>
2015-08-28 18:41:28.507 soulbeats[13652:3903] <MultiroomPlay: 0x1760ba90>
2015-08-28 18:41:28.508 soulbeats[13652:5d03] Added speakerID: 7782687177520836128 to AllSpeakersIDList
2015-08-28 18:41:28.516 soulbeats[13652:1803] HandleGrouping: New temp group 239.11.11.12
2015-08-28 18:41:28.518 soulbeats[13652:3903] HandleGrouping: New temp group 239.11.11.12
2015-08-28 18:41:28.519 soulbeats[13652:5d03] Old speaker info is null
2015-08-28 18:41:28.527 soulbeats[13652:1803] HandleGrouping: added new member with id 6494094734139439904 temp group with ip 239.11.11.12
2015-08-28 18:41:28.530 soulbeats[13652:3903] HandleGrouping: added new member with id 72243140485806144 temp group with ip 239.11.11.12
2015-08-28 18:41:28.531 soulbeats[13652:5d03] <MultiroomPlay: 0x1760ba90>
2015-08-28 18:41:28.543 soulbeats[13652:5d03] HandleGrouping: added new member with id 7782687177520836128 temp group with ip 239.11.11.12
既然可以看到了,ID正好是SAME。
-------另一個更新:添加的代碼在類的初始化-------
+ (MultiroomPlay *)getMultiroomPlay
{
static MultiroomPlay *sharedMultiroomPlay;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,
^{
sharedMultiroomPlay = [[MultiroomPlay alloc] init];
});
return sharedMultiroomPlay;
}
- (id)init
{
self = [super init];
if (self)
{
[self openSocket];
_allSpeakersIDList = [[NSMutableArray alloc] init];
_allPermGroupsIDList = [[NSMutableArray alloc] init];
_allGroupsIPList = [[NSMutableArray alloc] init];
_allUngroupedSpeakersList = [[NSMutableArray alloc] init];
_allUngroupedPermGroupsList = [[NSMutableArray alloc] init];
_allTempGroupsList = [[NSMutableArray alloc] init];
_tempGroupMemberRemoveSeqList = [[NSMutableArray alloc] init];
_ID_TCPConnection_Map = [[NSMutableDictionary alloc] init];
_ID_SpeakerInfo_Map = [[NSMutableDictionary alloc] init];
_ID_PermGroupInfo_Map = [[NSMutableDictionary alloc] init];
_IP_GroupInfo_Map = [NSMutableDictionary dictionary]; // <--Look here
_IP_PlayerInfo_Map = [[NSMutableDictionary alloc] init];
_IP_PlayBackTimer_Map = [[NSMutableDictionary alloc] init];
_IP_FinishSeqNum_Map = [[NSMutableDictionary alloc] init];
}
return self;
}
---------添加日誌中值的GroupInfo ------------
在適當的初始化方法2015-08-28 19:07:29.043 soulbeats[13709:3307] Discovered speaker with id 6494094734139439904
2015-08-28 19:07:29.046 soulbeats[13709:1803] Discovered speaker with id 72243140485806144
2015-08-28 19:07:29.050 soulbeats[13709:3307] Added speakerID: 6494094734139439904 to AllSpeakersIDList
2015-08-28 19:07:29.052 soulbeats[13709:1803] Added speakerID: 72243140485806144 to AllSpeakersIDList
2015-08-28 19:07:29.058 soulbeats[13709:3307] Old speaker info is null
2015-08-28 19:07:29.060 soulbeats[13709:1803] Old speaker info is null
2015-08-28 19:07:29.066 soulbeats[13709:3307] <MultiroomPlay: 0x1460e920>
2015-08-28 19:07:29.069 soulbeats[13709:1803] <MultiroomPlay: 0x1460e920>
2015-08-28 19:07:29.074 soulbeats[13709:3307] Value of Groupinfo: (null)
2015-08-28 19:07:29.076 soulbeats[13709:1803] Value of Groupinfo: (null)
2015-08-28 19:07:29.081 soulbeats[13709:3307] HandleGrouping: New temp group 239.11.11.12
2015-08-28 19:07:29.083 soulbeats[13709:1803] HandleGrouping: New temp group 239.11.11.12
2015-08-28 19:07:29.089 soulbeats[13709:3307] HandleGrouping: added new member with id 6494094734139439904 temp group with ip 239.11.11.12
2015-08-28 19:07:29.091 soulbeats[13709:1803] HandleGrouping: added new member with id 72243140485806144 temp group with ip 239.11.11.12
2015-08-28 19:07:29.098 soulbeats[13709:3307] Discovered speaker with id 7782687177520836128
2015-08-28 19:07:29.250 soulbeats[13709:3307] Added speakerID: 7782687177520836128 to AllSpeakersIDList
2015-08-28 19:07:29.332 soulbeats[13709:3307] Old speaker info is null
2015-08-28 19:07:29.380 soulbeats[13709:3307] <MultiroomPlay: 0x1460e920>
2015-08-28 19:07:29.394 soulbeats[13709:3307] Value of Groupinfo: <GroupInfo: 0x1589aad0>
2015-08-28 19:07:29.400 soulbeats[13709:3307] HandleGrouping: added new member with id 7782687177520836128 temp group with ip 239.11.11.12
我看不出這個代碼有什麼問題,這導致我相信你有兩個*實例*的類實現'handleGroupingFromReceivedSpeakerInfo'。 –
你可以添加'NSLog(@「%@」,self);'來檢查該方法嗎? –
您是否創建了一個實例並將其設置爲「_IP_GroupInfo_Map」? – Wain