i working on xmpp project. have completed login process , online ofline rosters. dont know how go next view controller particular user's field , chat him. here try. now have write in uitableview's delegate method
friendsviewcontroller.m file // fetch online , offline rosterlist #pragma mark -tableview datasource method - (nsinteger)numberofsectionsintableview:(uitableview *)tableview { return [[[self fetchedresultscontroller] sections] count]; } - (cgfloat)tableview:(uitableview *)atableview heightforrowatindexpath:(nsindexpath *)indexpath { switch (indexpath.row){ case 0: if(indexpath.section==0) return 60.0; // first row 123pt high default: return 60.0; // other rows 40pt high } } - (nsstring *)tableview:(uitableview *)sender titleforheaderinsection:(nsinteger)sectionindex { nsarray *sections = [[self fetchedresultscontroller] sections]; if (sectionindex < [sections count]) { id <nsfetchedresultssectioninfo> sectioninfo = [sections objectatindex:sectionindex]; int section = [sectioninfo.name intvalue]; switch (section) { case 0 : return @"available"; case 1 : return @"away"; default : return @"offline"; } } return @"";} - (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)sectionindex{ nsarray *sections = [[self fetchedresultscontroller] sections]; if (sectionindex < [sections count]) { id <nsfetchedresultssectioninfo> sectioninfo = sections[sectionindex]; return sectioninfo.numberofobjects; } return 0;} - (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath { static nsstring *simpletableidentifier = @"simpletableitem"; uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:simpletableidentifier]; if( cell == nil){ cell = [[uitableviewcell alloc] initwithstyle:uitableviewcellstylesubtitle reuseidentifier:simpletableidentifier]; } xmppusercoredatastorageobject *user = [[self fetchedresultscontroller] objectatindexpath:indexpath]; cell.textlabel.text = user.displayname; [self configurephotoforcell:cell user:user]; // cell.detailtextlabel.text= [self.tblchathistory objectatindex:indexpath.row]; cell.textlabel.textcolor=[uicolor whitecolor]; return cell; } #pragma mark - segue method - (void)prepareforsegue:(uistoryboardsegue *)segue sender:(id)sender { if ([[segue identifier] isequaltostring:@"chathistory"]) { creategroupviewcontroller *vc = [segue destinationviewcontroller]; } } - (bool)xmppstream:(xmppstream *)sender didreceiveiq:(xmppiq *)iq { nsxmlelement *queryelement = [iq elementforname: @"query" xmlns: @"jabber:iq:roster"]; if (queryelement) { nsarray *itemelements = [queryelement elementsforname: @"item"]; (int i=0; i<[itemelements count]; i++) { nslog(@"friend: %@",[[itemelements[i] attributeforname:@"jid"]stringvalue]); } } return no; } - (nsfetchedresultscontroller *)fetchedresultscontroller { if (fetchedresultscontroller == nil) { nsmanagedobjectcontext *moc = [[self appdelegate] managedobjectcontext_roster]; nsentitydescription *entity = [nsentitydescription entityforname:@"xmppusercoredatastorageobject" inmanagedobjectcontext:moc]; nssortdescriptor *sd1 = [[nssortdescriptor alloc] initwithkey:@"sectionnum" ascending:yes]; nssortdescriptor *sd2 = [[nssortdescriptor alloc] initwithkey:@"displayname" ascending:yes]; nsarray *sortdescriptors = [nsarray arraywithobjects:sd1, sd2, nil]; nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; [fetchrequest setentity:entity]; [fetchrequest setsortdescriptors:sortdescriptors]; [fetchrequest setfetchbatchsize:10]; fetchedresultscontroller = [[nsfetchedresultscontroller alloc] initwithfetchrequest:fetchrequest managedobjectcontext:moc sectionnamekeypath:@"sectionnum" cachename:nil]; [fetchedresultscontroller setdelegate:self]; nserror *error = nil; if (![fetchedresultscontroller performfetch:&error]) { ddlogerror(@"error performing fetch:= %@", error); //nslog(@"error = %@", error); } } return fetchedresultscontroller; } - (void)controllerdidchangecontent:(nsfetchedresultscontroller *)controller { [[self tblvwbuddy] reloaddata]; }
you can fetch user following way while showing in 1 screen means have jid of user, take user's jid , in next controller can filter user. here code filter porticular user xmppusercoredatastorageobject
means of jid. in case friendjid
jid filtered
- (xmppusercoredatastorageobject *)fetchtheuser { nsmanagedobjectcontext *moc = [app_delegate managedobjectcontext_roster]; nsentitydescription *entity = [nsentitydescription entityforname:@"xmppusercoredatastorageobject" inmanagedobjectcontext:moc]; nspredicate *pred = [nspredicate predicatewithformat:@"jidstr=%@",[self.friendjid lowercasestring]]; nsfetchrequest *fetchrequest = [[nsfetchrequest alloc] init]; [fetchrequest setentity:entity]; [fetchrequest setpredicate:pred]; nserror *error = nil; [fetchrequest setpredicate:pred]; nsarray *fetchedobjects = [[app_delegate managedobjectcontext_roster] executefetchrequest:fetchrequest error:&error]; xmppusercoredatastorageobject *objtemp = fetchedobjects.count?[fetchedobjects objectatindex:0]:nil; return objtemp; }
hope you. accept answer if find useful
Comments
Post a Comment