2012-10-30 3 views
1

J'ai un MutableArray dans la classe NSObject je veux passer le NSMutableArray à detailViewController puis je veux afficher le NSMutableArray dans tableView (detailViewController) .Dans ce projet, j'ai un contrôleur à deux vues on est firstViewcontroller et detailviewcontroller.le problème est que les données ne peuvent pas passer de NSObject.Donnez-moi une idée si vous voulez plus d'informations S'il vous plaît demander.erreur en passant NSMutableArray de NSObject à ViewController

peripheralmanager.m

- (void)centralManager:(CBCentralManager *)central 
didDiscoverPeripheral:(CBPeripheral *)peripheral 
advertisementData:(NSDictionary *)advertisementData 
       RSSI:(NSNumber *)RSSI 
{ 

    NSLog(@"didDiscoverPeriphera.peripheral: %@ rssi: %@, UUID:%@ advertisementData:%@", peripheral,RSSI,peripheral.UUID, [advertisementData description]); 

    targetPeripheral = peripheral; 
    peripheral.delegate = self; 
    // [[centralManager retrievePeripherals:NSArray arrayWithObject:(id)peripheral.UUID] ]; 
    // rssilabel.text=[RSSI stringValue]; 
    if (!peripheral.isConnected) 
    { 
    [centralManager connectPeripheral:peripheral options:nil]; 
    } 
    // MeBleAppDelegate *appdelegate=(MeBleAppDelegate *)[[UIApplication sharedApplication]delegate]; 
    MeBleDetailViewController *obj=[[MeBleDetailViewController alloc]init]; 
    // MeBleDetailViewController *obj=[[appdelegate sharedappdelegate].navigationController objectATindex:MeBleDetailViewController]; 
    obj.dataArray=self.mutableArray; 
    [self.mutableArray addObject:peripheral]; 
    printf("New UUId,addin\r\n"); 

} 

detailviewcontroller.m

- (void)viewDidLoad 
{ 
    //NSMutableArray *dataArray=[[NSMutableArray alloc]init]; 
    [super viewDidLoad]; 
    NSLog(@"%@",self.dataArray); 
    NSLog(@"%@",objCurrentDevice.mutableArray); 
    // PeripheralManager *peripheralmanager=[[PeripheralManager alloc]init]; 
    self.label.text=[NSString stringWithFormat:@" %@ ",dataArray]; 
    // Do any additional setup after loading the view. 
    // [self.dataArray addObject:objCurrentDevice.mutableArray]; 

    appDelegate.arrDevices=dataArray; 
    appDelegate = [[UIApplication sharedApplication] delegate]; 
    // write below line in any function in this file 
    // NSLog(@"%d",[appDelegate.arrDevices count]); 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *[email protected]"Cell1"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
    if(cell==nil) 
    { 
    cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
} 

    cell.textLabel.text=[dataArray objectAtIndex:indexPath.row]; 
    // PeripheralManager *objtemp=[[dataArray objectAtIndex:indexPath.row]deviceName]; 
    NSLog(@"%@",objCurrentDevice.deviceName); 
    return cell; 
} 

Message d'erreur

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 

*** First throw call stack: 

(0x356c888f 0x37a6f259 0x3561d1d7 0x164db 0x33135c8b 0x331421e9 0x33142059 0x33141f3f 0x331417c1 0x33141503 0x33135aff 0x331357d5 0x331ae903 0x33228627 0x351e2933 0x3569ca33 0x3569c699 0x3569b26f 0x3561e4a5 0x3561e36d 0x372ba439 0x3312acd5 0x1500f 0x14fb4) 

terminate called throwing an exception(lldb) 

Je veux sortie comme ceci image..Please Donner une idea..Please Ask Me pour plus d'informations.

enter image description here

+0

je pense que '[self.mutableArray addObject: périphérique];' peut ajouter « néant » – BabyPanda

+0

Combien de fois allez-vous poser la même question ? – Abizern

+0

@Abizern Toujours en erreur J'ai essayé tant de façons. Ne vous mettez pas en colère cool. – prem

Répondre

2

Vous pouvez utiliser désigné intializer pour résoudre ce problème

Dans votre FirstViewController

-(id)initwithData (NSArray*)array 
{ 
    //store the data in array 
} 

Dans le DetailedViewController vous pouvez appeler cette méthode ..

MeBleDetailViewController *obj=[[MeBleDetailViewController alloc]initwithData:yournsarrayname]; 

Vous pouvez voir votre tableau sera chargé avec les données

+1

frère merci ... :) – prem

1

Je ne pense pas que vous avez lu le message d'exception:

-[__NSArrayM insertObject:atIndex:]: object cannot be nil' 

Cette exception n'a rien à voir avec le passage du tableau autour, ce qui a trait à la façon dont vous peuplez le tableau. Les classes de collection Cocoa ne peuvent pas contenir de pointeurs nil (voir NSNull si vous voulez quelque chose comme ça) et vous essayez de placer un pointeur nil dans le tableau, ce qui est contraire à (littéralement).

Ajouter un code de garde:

obj.dataArray=self.mutableArray; 
if (peripheral != nil) 
    [self.mutableArray addObject:peripheral]; 
+0

aucun ami montrant la même erreur. – prem

+0

@prem OK, vous aurez besoin de poster la piletrace symbolique (une liste d'adresses n'est pas suffisante). – trojanfoe

+0

@Abizern Toujours en erreur j'ai essayé tant de façons. ne vous fâchez pas. – prem

Questions connexes