0

私はサービスを持っており、 SudzC.comSOAPでクラスと関数を生成しました。

だから私は彼らが生成したsoap関数を使用しています、それはNSMutableArray私のカスタムクラス(彼らによっても生成されます)によって継承されたオブジェクトでを返します。

これまでのところすべてが良いです。私の値は配列に入り、1つの条件で任意のオブジェクトの任意のプロパティを見ることができました:サービスを処理している関数の内部のみ。

明確にするために、ここにコードがあります:

- (void)viewDidLoad
{
    SDZGeneratedWebService* service = [SDZGeneratedWebService service];
    service.logging = YES;

    [service callMyData:self action:@selector(callMyDataHandler:) dataId: 1];
    [super viewDidLoad];
}

- (void) callMyDataHandler: (id) value {

    // Handle errors
    if([value isKindOfClass:[NSError class]]) {
        NSLog(@"%@", value);
        return;
    }

    // Handle faults
    if([value isKindOfClass:[SoapFault class]]) {
        NSLog(@"%@", value);
        return;
    }               

    // Do something with the NSMutableArray* result
    NSMutableArray *result = (NSMutableArray *)value;
    MyCustomClass *myObject = [result objectAtIndex:0];
    NSLog(@"%@", myObject.myProperty); //Works Great
}

私が言ったように、これまでのところすべてが完璧です。ただし、この関数以外のデータを使用する必要があります。

だから私の.hファイルでは、私は次のような配列を作成しましたNSMutableArray *myDataArray;

result配列をにコピーしようとすると、オブジェクトがコピーされます(値が配列と等しいmyDataArrayことがわかります)が、すべてのオブジェクトは「」です。なので使えません。myDataArray.countresultout of scope

また、すべてのオブジェクトをインデックスでコピーしようとしましたfor loopが、オブジェクトはその値を取得していますが、 " addObject" to myDataArray、same out of scope、。

ここで何が問題になっていますか?この方法でカスタムクラスの配列を生成することはできませんか?

編集:myDataArrayを生成しているコード:

    myDataArray = [[NSMutableArray alloc] init];
    [myDataArray removeAllObjects];
    for (int i=0; i<((NSMutableArray *)result).count; i++) {
        MyCustomClass *myObject = [result objectAtIndex:i];
        [myDataArray addObject:myObject];
        [myObject release];
    }

    [self.tableView reloadData];
} //(End of callMyDataHandler function)

私も以前にこの方法を試しました:

    [myDataArray removeAllObjects];
    duyurular = [result mutableCopy];
} //(End of callMyDataHandler function)
4

1 に答える 1

0

次の方法を使用して、ある配列から別の配列にオブジェクトをコピーできます。

NSArray *source;
NSArray *dst = [[NSArray alloc] initWithArray:source];

コードでは、line:を削除する必要があります。ドット表記を使用するよりも、[myObject release];呼び出す方がよいでしょう。[((NSMutableArray *)result) count]

于 2011-10-06T09:37:52.037 に答える