下面是每次收到扬声器信息时调用的方法。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