Objetivo C: mensajería/declaración de propiedad/problema ARC

Obtengo lo que XCode etiqueta como ARC Issue que me cuesta bastante analizar. tengo esta clase:

typedef void (^sig_cb_t)(NSString *parm);

@protocol Signaleer
// <snip>
-(void) connect:(NSString *) verb
          parm:(NSString*) param
      callback:(sig_cb_t)callback;
@end

// In another header:
@interface Switchboard : NSObject <Signaleer> {
   @private
   NSMutableDictionary *bus;
}

// In init: method:
bus = [[NSMutableDictionary alloc] init];

// actual implementation:
-(void) connect: (NSString *)verb
           parm:(NSString*)parm
       callback:(sig_cb_t)callback {
  NSMutableArray *callbacks = [self.bus objectForKey:verb];
  NSArray *signal = [NSArray arrayWithObjects:callback, parm, nil];
  if (callbacks == nil) {
    NSArray *initial = [NSArray arrayWithObjects:signal, verb, nil];
    [bus setObject: initial, forKey:verb];
  } else {
    [callbacks addObject:signal];
  }
}

La línea [bus setObject: initial, verb] da como resultado el error No visible @interface for 'NSMutableDictionary' declares the selector 'setObject:'. ¿Alguien que pueda explicar esto?

preguntado el 29 de mayo de 12 a las 15:05

3 Respuestas

Supongo que te refieres aquí a la línea:

[bus setObject: initial, forKey:verb];

(usted escribe [bus setObject: initial, verb] en la última línea de su pregunta que supongo que es un error)

Ambas líneas tienen una coma allí, que no debería estar allí.

contestado el 29 de mayo de 12 a las 15:05

¡Maldito! Así es, pensando demasiado en la sintaxis de otros lenguajes, obviamente. - jacob oscarson

Tienes una coma después initial. Debería ser:

    [bus setObject:initial forKey:verb];

contestado el 29 de mayo de 12 a las 15:05

Elimine la coma de esa llamada de método y ya no tendrá el error. No se necesitan comas para separar las listas de parámetros normales en Objective-C

[bus setObject:initial forKey:verb];

contestado el 29 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.