code_junkie

Is possible send a array in Obj-c for a variable arguments function?

Nov 13th, 2011
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. - (BOOL) executeUpdate:(NSString*)sql, ... {
  2.  
  3. [db executeUpdate:@"insert into test (a, b, c, d, e) values (?, ?, ?, ?, ?)" ,
  4. @"hi'", // look! I put in a ', and I'm not escaping it!
  5. [NSString stringWithFormat:@"number %d", i],
  6. [NSNumber numberWithInt:i],
  7. [NSDate date],
  8. [NSNumber numberWithFloat:2.2f]];
  9.  
  10. NSMutableArray *values = [NSMutableArray array];
  11.  
  12. for (NSString *fieldName in props) {
  13. ..
  14. ..
  15. [values addObject : value]
  16. }
  17. [db executeUpdate:@"insert into test (a, b, c, d, e) values (?, ?, ?, ?, ?)" ,??values];
  18.  
  19. NSArray* VarArgs(va_list ap)
  20. {
  21. id obj;
  22. NSMutableArray* array = [NSMutableArray array];
  23.  
  24. while ((obj = va_arg(ap, id))) {
  25. [array addObject:obj];
  26. }
  27. return array;
  28. }
  29.  
  30. #define VarArgs2(_last_) ({
  31. va_list ap;
  32. va_start(ap, _last_);
  33. NSArray* __args = VarArgs(ap);
  34. va_end(ap);
  35. if (([__args count] == 1) && ([[__args objectAtIndex:0] isKindOfClass:[NSArray class]])) {
  36. __args = [__args objectAtIndex:0];
  37. }
  38. __args; })
  39.  
  40. // '...' must be objc objects with nil sentinel OR an NSArray with nil sentinel
  41. - (void)someMethod:(NSString *)sql, ...
  42. {
  43. NSArray *args = VarArgs2(sql);
  44.  
  45. // Do stuff with args
  46. }
  47.  
  48. - (void)someMethod:(NSString *)sql, ... NS_REQUIRES_NIL_TERMINATION;
  49.  
  50. [db executeUpdate:@"insert into test (a, b) values (?, ?)", [values objectAtIndex:0], [values objectAtIndex:1]]
  51.  
  52. if ([values count] == 1) {
  53. [db executeUpdate:query, [values objectAtIndex:0]];
  54. }
  55. else if ([values count] == 2) {
  56. [db executeUpdate:query, [values objectAtIndex:0], [values objectAtIndex:1]];
  57. }
  58.  
  59. executeUpdateWrapper(@"insert into test (a, b) values (?, ?)", values);
  60.  
  61. char *argList = (char *)malloc(sizeof(NSString *) * [arguments count]);
  62. [arguments getObjects:(id *)argList];
  63. contents = [[NSString alloc] initWithFormat:formatString arguments:argList];
  64. free(argList);
  65.  
  66. - (BOOL) executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;
  67.  
  68. #define splitAlternatingArray(args,arg1,arg2)
  69. NSMutableArray *arg1 = [NSMutableArray array];
  70. NSMutableArray *arg2 = [NSMutableArray array];
  71. {
  72. BOOL isFirst = YES;
  73. for (id arg in args) {
  74. if (isFirst) {
  75. [arg1 addObject:arg];
  76. } else {
  77. [arg2 addObject:arg];
  78. }
  79. isFirst = !isFirst;
  80. }
  81. }
  82.  
  83. - (id)initWithObjectsAndKeys:(id)firstObject, ...{
  84. NSArray *objKeyArray = VarArgs2(firstObject);
  85. splitAlternatingArray(objKeyArray,objs,keys);
  86. return [self initWithObjects:objs forKeys:keys];
  87. }
Add Comment
Please, Sign In to add comment