Developer Area

root/apps/iphone/my.tel/trunk/Classes/RecordViewController.m @ 657

Revision 651, 19.9 kB (checked in by henri, 5 years ago)

Minor fixes to silence warnings

Line 
1//
2//  RecordViewController.m
3//  My.tel
4//
5//  Created by Henri Asseily on 11/18/08.
6//  Copyright 2008 Telnic Ltd.. All rights reserved.
7//
8
9#import "RecordViewController.h"
10
11#define kRowHeight 52.0
12
13static NSDictionary *imageMappings;
14
15@interface RecordViewController (PrivateMethods)
16- (void)setDidPreload:(BOOL)preload;
17@end
18
19@implementation RecordViewController
20
21@synthesize skeysDict;
22@synthesize liDict;
23
24@synthesize apiId;
25@synthesize recordsArray;
26@synthesize uiArray;
27
28@synthesize editController;
29@synthesize delegate;
30
31#pragma mark -
32#pragma mark Designated initializer
33
34+ (RecordViewController *)controllerWithDelegate:(id <TelControllerDelegate>)aDelegate preload:(BOOL)preload {
35        RecordViewController *theC = [[[RecordViewController alloc] initWithStyle:UITableViewStyleGrouped] autorelease];
36        theC.delegate = aDelegate;
37        theC.skeysDict = [NSMutableDictionary dictionaryWithContentsOfFile:
38                                          [[NSBundle mainBundle] pathForResource:@"ServiceTypes" ofType:@"plist"]];
39        theC.liDict = [NSMutableDictionary dictionaryWithContentsOfFile:
40                                   [[NSBundle mainBundle] pathForResource:@"LocationIndicators" ofType:@"plist"]];
41        theC.recordsArray = [NSMutableArray arrayWithCapacity:20];
42        theC.uiArray = [NSMutableArray arrayWithCapacity:20];
43
44        if (preload) {
45                [theC getRecords];
46        }
47        [theC setDidPreload:preload];
48        return theC;   
49}
50
51- (void)setDidPreload:(BOOL)preload {
52        didPreload = preload;
53}
54
55#pragma mark ------ Class variables access
56
57+ (NSDictionary *)imageMappings {
58        if (!imageMappings) {
59                imageMappings = [[NSDictionary dictionaryWithObjectsAndKeys:
60                                                  @"unknown.png", @"unknown",
61                                                  @"phone.png", @"voice",
62                                                  @"fax.png", @"fax",
63                                                  @"blackberry.png", @"mobile",
64                                                  @"mobile.png", @"mobileOther",
65                                                  @"sms.png", @"sms-tel",
66                                                  @"sms.png", @"mms-tel",
67                                                  @"sms.png", @"ems-tel",
68                                                  @"email.png", @"email",
69                                                  @"email.png", @"sms-email",
70                                                  @"email.png", @"mms-email",
71                                                  @"email.png", @"ems-email",
72                                                  @"http.png", @"web",
73                                                  @"http.png", @"web-ssl",
74                                                  @"voip.png", @"skype-voice",
75                                                  @"voip.png", @"aol-voice",
76                                                  @"voip.png", @"google-voice",
77                                                  @"voip.png", @"msn-voice",
78                                                  @"voip.png", @"yahoo-voice",
79                                                  @"voip.png", @"sip-voice",
80                                                  @"voip.png", @"h323-voice",
81                                                  @"im.png", @"icq",
82                                                  @"im.png", @"skype-im",
83                                                  @"im.png", @"aol-im",
84                                                  @"im.png", @"google-im",
85                                                  @"im.png", @"msn-im",
86                                                  @"im.png", @"yahoo-im",
87                                                  @"im.png", @"xmpp",
88                                                  @"ftp.png", @"ftp",
89                                                  @"username.png", @"user",
90                                                  @"info.png", @"note",
91                                                  @"goto.png", @"ntn",
92                nil] retain];
93        }
94        return imageMappings;
95}
96               
97#pragma mark ------ Standard View Controller Methods
98
99- (void)viewDidLoad {
100    [super viewDidLoad];
101        self.title = @"Contact Items";
102        self.navigationItem.rightBarButtonItem = self.editButtonItem;
103        self.tableView.allowsSelectionDuringEditing = YES;      // so that the insert cell can be selected
104        self.tableView.rowHeight = recordTableHeight = kRowHeight;
105        [[self class] imageMappings];
106}
107
108- (void)viewWillAppear:(BOOL)animated {
109        [super viewWillAppear:animated];
110        // Don't get the data if we preloaded
111        if (didPreload) {
112                didPreload = NO;
113        } else {
114                [self getRecords];
115        }
116}
117
118- (void)dealloc {
119        self.liDict = nil;
120        self.skeysDict = nil;
121        self.apiId = nil;
122        self.recordsArray = nil;
123        self.uiArray = nil;
124        self.editController = nil;
125        [imageMappings release];
126    [super dealloc];
127}
128
129#pragma mark ------ TableView Delegate and DataSource Methods
130
131- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
132    return 1;
133}
134
135- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
136        return @"All records";
137}
138
139- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
140        return [uiArray count];
141}
142
143- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
144        // UI Item keys:
145        // apiId (string), terminal (bool), enabled (bool), imageName (string),
146        // private (bool), service (string), label (string), value (string)
147       
148    static NSString *CellIdentifier = @"RecordCellIdentifier";
149   
150        RecordCell *cell;
151       
152        cell = (RecordCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
153        if (cell == nil) {
154                cell = [[[RecordCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
155                cell.canBeDisabled = FALSE;             // When not handling profiles, don't allow enable/disable
156   }
157        NSMutableDictionary *uiItem = [[uiArray objectAtIndex:indexPath.row] retain];
158        if ([[uiItem objectForKey:@"isSupported"] integerValue] == 0) {
159                cell.accessoryType = UITableViewCellAccessoryNone;
160        } else {
161                cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
162        }
163       
164        [cell.labelService setText:[NSString stringWithFormat:@"%@", [uiItem objectForKey:@"service"]]];
165        [cell.labelLabel setText:[NSString stringWithFormat:@"%@", [uiItem objectForKey:@"longLabel"]]];
166        [cell.labelValue setText:[NSString stringWithFormat:@"%@", [uiItem objectForKey:@"value"]]];
167       
168        // Set the icon image
169        [cell.labelImage setImage:[UIImage imageNamed:(NSString *)[uiItem objectForKey:@"imageName"]]];
170        //[cell.labelImage setBounds:CGRectMake(33.0, 5.0, 30.0, 30.0)];
171
172        // TODO: Overlay a small padlock image if the record is private
173
174        [uiItem release];
175
176        return cell;
177}
178
179- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
180        if ([tableView cellForRowAtIndexPath:indexPath].editingStyle == UITableViewCellEditingStyleDelete) {
181                // Do not go into the record edit view when the table is in editing mode
182                return nil;
183        }
184        // Do not edit an unsupported NAPTR record
185        NSDictionary *uiItem = [uiArray objectAtIndex:indexPath.row];
186        if ([[uiItem objectForKey:@"isSupported"] integerValue] == 0) {
187                return nil;
188        }
189        return indexPath;
190}
191
192 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
193         [tableView deselectRowAtIndexPath:indexPath animated:YES];
194         if ([tableView cellForRowAtIndexPath:indexPath].editingStyle == UITableViewCellEditingStyleInsert) {
195                 // we're inserting a row
196                 [tableView.dataSource tableView:tableView
197                                          commitEditingStyle:UITableViewCellEditingStyleInsert forRowAtIndexPath:indexPath];
198         } else {
199                 NSDictionary *theRecord = [self selectRecordInSetUsingId:[[uiArray objectAtIndex:indexPath.row]
200                                                                                                                                   objectForKey:@"apiId"]];
201                 [self displayEditingForRecord:theRecord];
202                 
203         }
204 }
205
206- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
207        [super setEditing:editing animated:animated];
208        if (editing) {
209                dataDidChange = NO;     // we won't hit the network unless the user changed something
210                self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
211                                                                                                                                                                                          target:self
212                                                                                                                                                                                           action:@selector(addRecord)] autorelease];
213        } else {
214                self.navigationItem.leftBarButtonItem = nil;
215                if (dataDidChange) {
216                        dataDidChange = NO;
217                        buttonEditCount = 3;
218                        UIActivityIndicatorView *aiV = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
219                        [aiV startAnimating];
220                        UIBarButtonItem *savingButton = [[[UIBarButtonItem alloc] initWithCustomView:aiV] autorelease];
221                        [aiV release];
222                        self.navigationItem.rightBarButtonItem = savingButton;
223                        [self orderRecords];
224                } else {
225                        // No data changed, let's just fix the edit button
226                        [self updateEditButtonAndDoNothing:nil];
227                }
228
229        }
230}
231
232- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
233        if (self.editing) {
234                return UITableViewCellEditingStyleDelete;
235        } else {
236                return UITableViewCellEditingStyleNone;
237        }
238}
239
240- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
241       
242        if (editingStyle == UITableViewCellEditingStyleDelete) {
243                dataDidChange = YES;
244                if (self.editing) {
245                        // delete immediately, do not cache deletion because we can't tell a single row swipe from multiple deletes
246                        [self deleteRecords:[uiArray objectAtIndex:indexPath.row]];
247                }
248                [uiArray removeObjectAtIndex:indexPath.row];
249                [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
250        }
251}
252
253- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
254        // Disable swipe-to-delete: don't allow row edit if table not in edit mode
255        return (tableView.editing);
256}
257
258- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
259    return YES;
260}
261
262- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
263          toIndexPath:(NSIndexPath *)toIndexPath {
264        dataDidChange = YES;
265        NSDictionary *recordToMove = [[uiArray objectAtIndex:fromIndexPath.row] retain];
266    [uiArray removeObjectAtIndex:fromIndexPath.row];
267    [uiArray insertObject:recordToMove atIndex:toIndexPath.row];
268    [recordToMove release];     
269}
270
271//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
272//      // If there's no label, shorten the row by the label point size + 2
273//      if ([[[uiArray objectAtIndex:indexPath.row] objectForKey:@"longLabel"] length] == 0) {
274//              return (recordTableHeight - 14);
275//      }
276//      return recordTableHeight;
277//}
278
279#pragma mark ------ Open Record Edit view
280
281- (void)addRecord {
282        [self displayEditingForRecord:nil];
283}
284
285- (void)displayEditingForRecord:(NSDictionary *)aRec {
286        if (!editController) {
287                editController = [[RecordEditController controllerWithServiceKeys:skeysDict lihKeys:liDict] retain];
288                editController.delegate = self;
289        }
290        editController.record = aRec;
291        [self.navigationController pushViewController:editController animated:YES];
292}
293
294#pragma mark ------ UI Methods and Json Delegates
295
296- (NSDictionary *)selectRecordInSetUsingId:(NSString *)anId {
297        // selects the correct full record in the set from an id
298        for (NSDictionary *theRec in recordsArray) {
299                if ([[theRec valueForKey:@"apiId"] integerValue] == [anId integerValue]) {
300                        return theRec;
301                }
302        }
303        return nil;
304}
305
306- (void)updateEditButtonAndDoNothing:(NSDictionary *)parsedJson {
307        if (parsedJson) {
308                [[MyTelConnect sharedInstance] doNothing:parsedJson];
309        }
310        self.navigationItem.rightBarButtonItem = self.editButtonItem;
311}
312
313- (void)updateUITableWithJson:(NSDictionary *)parsedJson {
314#ifdef DEBUG
315        NSLog(@"%@", [parsedJson descriptionInStringsFileFormat]);
316#endif
317       
318        [self.recordsArray removeAllObjects];
319        [self.uiArray removeAllObjects];
320        if ([[parsedJson valueForKey:@"success"] integerValue] == 1) {
321                [self.recordsArray setArray:(NSArray *)[parsedJson valueForKey:@"recordList"]];
322                for (NSDictionary *aRec in self.recordsArray) {
323                        [self.uiArray addObject:[self uiItemFromJsonItem:aRec]];
324                }
325                [self.delegate dataDidChangeInController:self];
326                [self.tableView reloadData];
327        } else {
328                [self.tableView reloadData];
329                [Record throwJsonErrorAlert:parsedJson];
330        }
331       
332}
333
334- (NSMutableDictionary *)uiItemFromJsonItem:(NSDictionary *)jsonItem {
335        // Method that creates a dictionary to display in a cell row
336        // Sample jsonItem:
337        //  {apiId: 23, terminal: true,
338        //      serviceKeys: ["voice", "fax"], value: "+34.34343443",
339        //      groups: [1, 3],
340        //      profiles: [12, 23], global: false,
341        //      locations: ["x-home", "x-mobile"], editable: true,
342        //  longLabel: "Some text to describe my home number"}
343        //
344        // we also add the parameter "isSupported": we don't support
345        // editing of custom records where the serviceType doesn't exist
346#ifdef DEBUG
347        NSLog(@"Naptr Rec in JSON: %@", [jsonItem descriptionInStringsFileFormat]);
348#endif
349       
350        NSMutableDictionary *uiItem;
351        if (!jsonItem) {
352                return NULL;
353        }
354        uiItem = [NSMutableDictionary dictionaryWithCapacity:7];
355       
356        // default to item supporting editing
357        [uiItem setObject:@"1" forKey:@"isSupported"];
358
359        // set apiId
360        [uiItem setObject:(NSString *)[jsonItem objectForKey:@"apiId"] forKey:@"apiId"];
361       
362        // set naptr value
363        if ([[jsonItem objectForKey:@"value"] isKindOfClass:[NSNull class]])
364                [uiItem setObject:@"" forKey:@"value"];
365        else
366                [uiItem setObject:(NSString *)[jsonItem objectForKey:@"value"] forKey:@"value"];
367
368        // set label
369        if ([[jsonItem objectForKey:@"longLabel"] isKindOfClass:[NSNull class]])
370                [uiItem setObject:@"" forKey:@"longLabel"];
371        else
372                [uiItem setObject:(NSString *)[jsonItem objectForKey:@"longLabel"] forKey:@"longLabel"];
373       
374        // set public/private
375        if ([(NSArray *)[jsonItem objectForKey:@"groups"] count] > 0)
376                [uiItem setValue:@"1" forKey:@"private"];
377        else
378                [uiItem setValue:@"0" forKey:@"private"];       
379       
380        // test nonterminal and return
381        if ([jsonItem objectForKey:@"terminal"] && [[jsonItem objectForKey:@"terminal"] integerValue] == 0) { //nonterminal
382                [uiItem setValue:@"0" forKey:@"terminal"];
383                [uiItem setObject:[self.skeysDict objectForKey:@"ntn"] forKey:@"service"];
384                [uiItem setObject:(NSString *)[[RecordViewController imageMappings] objectForKey:@"ntn"] forKey:@"imageName"];
385                return uiItem;
386        }
387        [uiItem setValue:@"1" forKey:@"terminal"];
388               
389        // set service + LI string, and image as well
390        NSMutableString *sPart = [NSMutableString stringWithString:@""];
391        NSMutableString *liPart = [NSMutableString stringWithString:@""];
392        BOOL couldbeMobilePhone = NO;
393        if ([jsonItem objectForKey:@"serviceKeys"]) {
394                NSUInteger i, count = [[jsonItem objectForKey:@"serviceKeys"] count];
395                if (count == 0) {
396                        [sPart setString:@"<unsupported>"];
397                        [uiItem setObject:@"0" forKey:@"isSupported"];
398                } else {
399                        for (i = 0; i < count; i++) {
400                                NSString *anS = [[jsonItem objectForKey:@"serviceKeys"] objectAtIndex:i];
401                                if (i == 0) {
402                                        // set the icon image to the first service key
403                                        if ([imageMappings objectForKey:anS]) {
404                                                [uiItem setObject:[[RecordViewController imageMappings] objectForKey:anS] forKey:@"imageName"];
405                                        } else {
406                                                [uiItem setObject:[[RecordViewController imageMappings] objectForKey:@"unknown"] forKey:@"imageName"];
407                                        }
408                                        // Check for mobile phones (yes mobile phones SHOULD have been their own
409                                        // type, but blame the IETF for this ridiculous state of things)
410                                        if ([anS isEqualToString:@"voice"])
411                                                couldbeMobilePhone = YES; // Could be a mobile. see below
412                                } else {
413                                        [sPart appendString:@" & "];
414                                }
415                                if ([self.skeysDict objectForKey:anS]) {
416                                        [sPart appendString:[self.skeysDict objectForKey:anS]];
417                                } else {
418                                        [sPart appendString:anS];
419                                }
420                        }                       
421                }
422        } else {
423                [sPart setString:@"<unsupported>"];
424                [uiItem setObject:@"0" forKey:@"isSupported"];
425        }
426
427        if ([jsonItem objectForKey:@"locations"]) {
428                NSUInteger i, count = [[jsonItem objectForKey:@"locations"] count];
429                for (i = 0; i < count; i++) {
430                        if (i > 0)
431                                [liPart appendString:@" & "];
432                        NSString *anLI = (NSString *)[[jsonItem objectForKey:@"locations"] objectAtIndex:i];
433                        [liPart appendString:[self.liDict objectForKey:anLI]];
434                        if ([anLI isEqualToString:@"x-mobile"] && couldbeMobilePhone) {
435                                [uiItem setObject:[[RecordViewController imageMappings] objectForKey:@"mobile"] forKey:@"imageName"];
436                        }
437                }
438        }
439        [uiItem setObject:[NSString stringWithFormat:@"%@ %@", liPart, sPart] forKey:@"service"];
440       
441        return uiItem;
442}
443
444#pragma mark ------ Data management
445
446- (void)getRecords {
447        //inputRecord = {
448        //domainName: "stan.cartman.tel",
449        //profileId: 23,  /** use -1 to get all Records of the domain */
450        //includeNonTerminals: true
451        //};
452
453//      successResult = {
454//      success: true,
455//      domainId: 12,
456//      recordList: [{apiId: 23, terminal: true,
457//      serviceKeys: ["voice", "fax"], value: "+34.34343443",
458//      label: "my home number", groups: [1, 3],
459//      profiles: [12, 23], global: false,
460//      locations: ["x-home", "x-mobile"], editable: true},
461//      longLabel: "Some text to describe my home number",
462//      {apiId: 12, terminal: true, serviceKeys: ["web"],,
463//      value: "www.telnic.org", label: "my homepage",
464//      groups: [3], profiles: [], global: true,
465//      locations: ["x-home"], editable: true},
466//      {apiId: 12, terminal: false, value: "stan.cartman.tel.",
467//      groups: [3], profiles: [], global: true}],
468//      actionMessages: ["request successful",
469//                                       "2nd message here",
470//                                       "3rd message here"]
471//      };
472//     
473        Record *conn = [[[Record alloc] init] autorelease];
474        [conn setTheDelegate:self];
475        [conn setActionSel:@selector(updateUITableWithJson:)];
476        [conn setConnectionUrl:[conn urlFromAction:@"getrecordlist"]];
477       
478        NSMutableDictionary *requestData = [[NSMutableDictionary dictionaryWithCapacity:3] retain];
479        [requestData setObject:[self.delegate domain] forKey:@"domainName"];
480        [requestData setObject:@"-1" forKey:@"profileId"];
481        [requestData setObject:@"true" forKey:@"includeNonTerminals"];
482       
483        [conn setPayload:requestData];
484        [conn performLookup:TRUE];
485        [requestData release];
486}
487
488- (void)storeRecord:(NSDictionary *)aRec {
489//      inputRecord = {
490//      domainName: "cartman.tel",
491//      apiId: 0,
492//      serviceKeys: ["voice", "fax"],
493//      value: "+34.34343443",
494//      label: "my home number",
495//      groups: [1, 2, 3],
496//      profiles: [12, 23, 47],
497//      locations: ["x-home", "x-mobile"]
498//      };
499//     
500//      successResult = {
501//      success: "true",
502//      actionMessages: ["record stored successfully",
503//                                       "2nd message here",
504//                                       "3dmessage here"],
505//      apiId: 17
506//      };
507       
508        Record *conn = [[[Record alloc] init] autorelease];
509        [conn setTheDelegate:self];
510        [conn setActionSel:@selector(getRecords)];
511        [conn setConnectionUrl:[conn urlFromAction:@"storerecord"]];
512       
513        NSMutableDictionary *requestData = [[NSMutableDictionary dictionaryWithDictionary:aRec] retain];
514       
515        [conn setPayload:requestData];
516        [conn performLookup:TRUE];
517        [requestData release];
518}
519
520- (void)deleteRecords:(NSDictionary *)aRec {
521//      inputRecords = {
522//      domainName: "cartman.tel",
523//      apiIds: [23, 2, 22]
524//      };
525//     
526//      successResult = {
527//      success: true,
528//      actionMessages: ["records deleted"
529//                                       "2nd message here",
530//                                       "3rd message here"]
531//      };
532
533        if (!aRec)
534                return;
535        NSArray *idsToDelete;
536        idsToDelete = [NSArray arrayWithObject:[aRec objectForKey:@"apiId"]];
537        if ([idsToDelete count] == 0)   // Nothing to delete
538                return;
539        [idsToDelete retain];
540        Record *conn = [[[Record alloc] init] autorelease];
541        [conn setTheDelegate:[MyTelConnect sharedInstance]];
542        [conn setActionSel:@selector(doNothing:)];
543        [conn setConnectionUrl:[conn urlFromAction:@"deleterecords"]];
544       
545        NSMutableDictionary *requestData = [[NSMutableDictionary dictionaryWithCapacity:2] retain];
546        [requestData setObject:[self.delegate domain] forKey:@"domainName"];
547        [requestData setObject:idsToDelete forKey:@"apiIds"];
548       
549        [conn setPayload:requestData];
550        NSDictionary *parsedJson = [conn performLookup:FALSE];
551        [requestData release];
552        [idsToDelete release];
553        if ([[parsedJson valueForKey:@"success"] integerValue] == 0) {
554                [Record throwJsonErrorAlert:parsedJson];
555        }
556        [self getRecords];
557}
558
559
560- (void)orderRecords {
561//      inputRecords = {
562//      domainName: "cartman.tel",
563//      includeNonTerminals: true
564//      apiIds: [23, 31, 1, 45, 2, 22]
565//      };
566//     
567//      successResult = {
568//      success: true,
569//      actionMessages: ["records reordered"
570//                                       "2nd message here",
571//                                       "3rd message here"]
572//      };
573        if ([uiArray count] == 0) {
574                buttonEditCount--;
575                [self performSelector:@selector(updateEditButtonAndDoNothing:) withObject:nil];
576                return;
577        }
578        Record *conn = [[[Record alloc] init] autorelease];
579        [conn setTheDelegate:self];
580        [conn setActionSel:@selector(updateEditButtonAndDoNothing:)];
581        [conn setConnectionUrl:[conn urlFromAction:@"orderrecords"]];
582       
583        NSMutableDictionary *requestData = [[NSMutableDictionary dictionaryWithCapacity:3] retain];
584        [requestData setObject:[self.delegate domain] forKey:@"domainName"];
585        [requestData setObject:@"true" forKey:@"includeNonTerminals"];
586       
587        NSMutableArray *apiIdArray = [NSMutableArray arrayWithCapacity:[uiArray count]];
588        for (NSDictionary *theRow in uiArray) {
589                [apiIdArray addObject:[theRow objectForKey:@"apiId"]];
590        }
591        [requestData setObject:apiIdArray forKey:@"apiIds"];
592
593        [conn setPayload:requestData];
594        [conn performLookup:TRUE];
595        [requestData release];
596        buttonEditCount--;
597}
598
599#pragma mark -
600#pragma mark TelControllerDelegate methods
601
602- (void)dataDidChangeInController:(UIViewController *)controller {
603        if ([controller isMemberOfClass:[RecordEditController class]])
604                [self getRecords];
605}
606
607- (NSString *)domain {
608        // request the domain from the calling controller
609        return [self.delegate domain];
610}
611
612@end
613
Note: See TracBrowser for help on using the browser.
Telnic
Search This Site
Partners
Neustar
ICANN
Main site | WHOIS | Sell .tel | FAQ | Archived Site | About Telnic | Contact Us