1

私は NSObject クラスに MutableArray を持っています。NSMutableArray を detailViewController に渡したいのですが、次に NSMutableArray を tableView(detailViewController) に表示したいのです。このプロジェクトには、firstViewcontroller と detailviewcontroller の 2 つのビュー コントローラーがあります。 NSObject から。さらに詳しい情報が必要な場合は、アイデアをお寄せください。お問い合わせください。

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 *simpleTableIdentifier=@"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;
}

エラーメッセージ

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) 

この画像のような出力が欲しい..アイデアをください..詳細については、私に尋ねてください.

ここに画像の説明を入力

4

2 に答える 2

2

Designated initializerを使用してこの問題を解決できます

あなたのFirstViewController で

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

DetailedViewController では、このメソッドを呼び出すことができます..

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

配列にデータがロードされることがわかります

于 2012-10-30T09:08:36.787 に答える
1

例外メッセージを読んでいないと思います:

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

この例外は、配列を渡すこととは関係ありません。配列にデータを入力する方法に関連しています。Cocoa コレクション クラスはnilポインターを保持できず (NSNullそのようなものが必要かどうかを確認してください)、nilポインターを配列に入れようとしていますが、(文字通り) 例外が発生しています。

いくつかのガード コードを追加します。

obj.dataArray=self.mutableArray;
if (peripheral != nil)
    [self.mutableArray addObject:peripheral];
于 2012-10-30T09:07:44.913 に答える