objective-c - 遷移元 - viewcontroller 間 データ 受け渡し swift




ビューコントローラ間で変数を渡すにはどうすればよいですか? (4)

私はXcodeで苦労しています。 何らかの理由で、あるView Controllerクラスから別のView Controllerクラスに変数を渡すことはできません。 それはうまくいくはずです、私は基本的には他のクラスからコピー/貼り付けをしていました。 私は一晩中ずっとそれをしていました。私が考えることができるすべてを試しましたが、それはまだ残っています。

ここで私がコールしているView Controllerクラスがあります:

ResultadosViewController.h:

#import <UIKit/UIKit.h>
#import "Filme.h"
#import "Festival.h"
#import "Top10Discos.h"
#import "Peca.h"

@class DetalhesViewController;

@interface ResultadosViewController : UIViewController
{
    // Navegation
    DetalhesViewController *dvc;
    BOOL isViewPushed;

    // What i'd really like to pass lol
    NSArray *array_resultados;

}

@property (nonatomic, retain) NSArray *array_resultados;
@property (nonatomic, readwrite) BOOL isViewPushed;

@end*

ResultadosViewController.m:

#import "ResultadosViewController.h"
#import "DetalhesViewController.h"
#import "Filme.h"
#import "Peca.h"
#import "Top10Discos.h"
#import "Festival.h"

@implementation ResultadosViewController
@synthesize isViewPushed, array_resultados;

(...)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic -- create and push a new view controller

    if (indexPath.row == 2)
    {
        if(dvc != nil)
            [dvc dealloc];

        NSString *ffs = [[array_resultados objectAtIndex:indexPath.row] TituloFilme];

        dvc = [[DetalhesViewController alloc] initWithNibName:@"DetailedView" bundle:[NSBundle mainBundle]];

        **resultadosControllerCell.array_resultados  = [self array_resultados];** 
        *"Request for member 'array_resultados' in something not a structure or union"*

        //Push the view controller to the top of the stack.
        [self.navigationController pushViewController:dvc animated:YES];

    }
}

そして、ここに私は配列を送信したい他のクラスがあります:

DetalhesViewController.h:

#import <UIKit/UIKit.h>

#import "Filme.h"
#import "Festival.h"
#import "Top10Discos.h"
#import "Peca.h"


@interface DetalhesViewController : UIViewController
{
    // Navegacao
    NSArray *array_resultados;

}

@property (nonatomic, retain) NSArray *array_resultados;
@end

あなたがこのクラスの.mファイルを見るかどうかはわかりません。 その場合は、ただ聞いてください。

事前に感謝、ハル

PS:他の変数(他のタイプも)、クリーン/リビルド、xibファイルを再作成しようとしましたが、あなたはその名前をつけています...


これはあなたの質問にお答えするのではありませんが、あなたのメモリ管理は少しばかりです。 この行:

[dvc dealloc];

このように読むべきです:

[dvc release];
dvc = nil;

Cocoaでは、 dealloc直接呼び出してはいけません - retain/release/autoreleaseパターンに従ってください。


まず、インスタンス変数に直接アクセスする-> - を使わないでください。 それはうまくいくかもしれませんが、問題を尋ねているだけで、他のオブジェクトのインスタンス変数を変更することはありません。

そして、アダムローゼンフィールドはdvc->array_resultados意味しませんdvc->array_resultados 。 彼はresultadosControllerCell->array_resultadosを意味しresultadosControllerCell->array_resultados 。これは彼が言ったことであり、あなたが言ったことに基づいています。

正しい解決策は、元の行とAdamの行のリビジョンのブレンドです。

dvc.array_resultados = [self array_resultados];

これはDetalhesViewControllerクラスで宣言したプロパティを通過します。

それについて言えば、そのプロパティをcopyではなく、 retainすると宣言する必要があります。 さもなければ、あなたは他の誰かが変更可能な配列を保持していることに気づくでしょう。


私はそれを持っていた。 安いトリックを使って情報を表示する:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:ffs message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
    UILabel *myTextField = [[UILabel alloc] init];
    myTextField.text = @"FFS!";
    CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0.0, 130.0);
    [myAlertView setTransform:myTransform];

    [myTextField setBackgroundColor:[UIColor whiteColor]];
    [myAlertView addSubview:myTextField];
    [myAlertView show];
    [myAlertView release];

これを使って本当に嫌いですが、私はすでに一日遅れています。 私は昨日までにそれを届けたはずです。

あなたの助けをいただきありがとうございます、あなたが私に教えてください解決策を見つけることが起こった場合。 あなたはそれが再び起こるかどうかわからない:/

乾杯!


これを行うためのさらに有能な方法は、両方のビューコントローラからのデータをモデルに分離することです。 ResultadoModel.h / mと呼ばれる別のクラス(NSObject)があります。 これはシングルトンなので、両方のクラスが同じインスタンスにアクセスできます。

次のようにして配列にアクセスします(両方のvcsで):

[[[ResultadoModel sharedInstance] array_resultados] propertyOrMethod];

シングルトンを作成する方法を検索することができます。シンプトンは非常に簡単で非常に強力です。





cocoa-touch