0

ここでは、ユーザーがデータベースに値 (ユーザー名) を追加すると、配列が更​​新されますNSMutableArrayAppDelegateここで、配列の値 (ユーザー名) を次のビューに表示して、ピッカー ビューに一覧表示する必要があります。関連する質問が他にもあることは知っていますが、解決策が見つかりません。どんな助けでも感謝します。

これが私のコードです:

AppDelegateという名前のページで宣言した配列はjobarray、次のビューにアイテムをコピーする必要がありjobarray、そこで宣言しpickerarrayました。

pickerarray = [[NSMutableArray alloc] initWithArray:appDelegate.jobarray copyItems:YES];

しかし、それはエラーメッセージを返します、

['NSInvalidArgumentException', reason: '-[Coffee copyWithZone:]: unrecognized selector sent to instance 0x822d410']     where 'Coffee' is my sqlite3 object file.
4

3 に答える 3

1

SQLite オブジェクトは NSCopying プロトコルに準拠していません - 実装していません

- (id)copyWithZone:(NSZone *)zone;

方法。このメソッドを実装してオブジェクトをコピー可能にすることもできますが、表示のためのコピーのみが必要な場合は、配列自体のみをコピーすることをお勧めします。

NSMutableArray *newArray = [originalArray mutableCopy];

これは最初の配列のオブジェクトのみを保持するため、コピー プロトコルの実装をいじる必要はありません。

于 2012-08-03T06:41:34.857 に答える
0
[arr1 initWithObjects:@"1",@"2", nil];

おそらくあなたが望むのは、NSMutableArray を使用することです。

NSArray *arr1 = [NSArray arrayWithObjects:@"1",@"2", nil];
NSMutableArray *arr2 = [arr1 mutableCopy];

NSLog(@"arr1: %p, %@", arr1, arr1);
NSLog(@"arr2: %p, %@", arr2, arr2);

NSLog 出力:

arr1: 0x7924c50, (
                 1,
                 2
                 )
arr2: 0x7924f00, (
                 1,
                 2
                 )
于 2012-08-27T11:34:53.750 に答える
-1

配列から UIPickerView を作成するには、最初に UIPickeView データ ソースの接続を作成し、デリゲートを ViewController に戻す必要があります。UIPickerView コントロールから、Interface Builder で通常の方法で CTRL ドラッグすることにより、これを行うことができます。

また、デリゲート プロトコルをインターフェイス ファイルに含める必要があります。このようなものです。

@ViewController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate> {  

}

次に、実装ファイルで UIPickerView を生成するための委任されたメソッドを作成する必要があります。

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
 {
    //One column
    return 1;
 }

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
 {
   //set number of rows
     return myArrayObject.count;
 }

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
 {
     //set item per row
     return [myArrayObject objectAtIndex:row];
 }

これは、 myArrayObject が適切に宣言され、他の場所に入力されていることを前提としています。つまり、viewDidLoad の場合 - コンテンツが静的な場合。

于 2012-08-03T06:45:02.563 に答える