【问题标题】:Second view controller has no data第二个视图控制器没有数据
【发布时间】:2016-09-25 22:42:55
【问题描述】:

我实现了将数据从 FirstViewController 传递到 SecondViewController 的委托方法。

首先,我在FirstViewController 中创建了一个text FieldButton。其次,我创建了一个标签来显示 SecondViewController 中的数据。

应该如何工作: 用户将按下FirstViewController 中的按钮并将数据传递给secondViewController。此外,用户将使用 UISwipeGestureRecognizer 导航到第二个视图控制器,因此没有需要使用按钮转到第二个视图控制器。

我如何测试应用程序

1- 我运行应用程序。 --> 2- 我在文本字段中输入“Hello” --> 3- 我按下按钮 --> 4- 我滑动到第二个视图控制器查看数据 --> 5- 我在标签中看不到任何数据??

首先我创建了委托协议

FirstViewController.h

@class FirstViewController;

@protocol FirstControllerDelegate

-(void) updateLabel:(NSString*)string

@end

@property (weak, nonatomic) id<FirstViewControllerDelegate>delegate;
@property (weak, nonatomic) IBOutlet UITextField *TextField;
- (IBAction)button:(id)sender;

FirstViewController.m

@interface FirstViewController. ()
@end
@implementation ViewController1
@synthesize delegate;
@synthesize TextField;

-(void)viewDidLoad{
    [super viewDidLoad];
}
- (IBAction)Button:(id)sender {

  ViewController2 *vc2 = [[ViewController2 alloc] init];
   vc2.stringfromTextfield1 = self.TextField.text;

}

SecondViewController.h

#import "SecondViewController.h"
#import "FirstViewController.h"
@interface SecondViewController : UITableViewController<FirstControllerDelegate> 
@end
@property (weak, nonatomic) IBOutlet UILabel *Label;
@property (strong, nonatomic) NSString *stringfromTextfield1; 

SecondViewController.m

@interface SecondViewController. ()
    @end
    @implementation SecondViewController

    -(void)viewDidLoad{
        [super viewDidLoad];

     self.label.text = self.stringfromTextfield1;

    }

感谢您花时间和精力帮助我

【问题讨论】:

  • 如何显示第二个视图控制器,在哪里显示?我想知道您是否没有创建一个全新的 ViewController2 对象。
  • 我正在使用标签栏和滑动在这些视图控制器之间导航@Larme
  • 然后不要像现在这样自行创建视图控制器。 @Larme 100% 正确。
  • @luk2302 任何建议如何使它工作

标签: ios objective-c uiviewcontroller delegates


【解决方案1】:

您可以为此使用Singleton 类,或者您可以使用extern NSString 将字符串值移动到第二个视图控制器。

在第一个视图控制器中。

extern NSString *MyStr;

@interface 中定义它。

@interface{
NSString *MyStr;
}

@Implementation 中分配你想要的值。

第二个视图控制器只是#import第一个视图和使用,

MyStr 作为一个变量,它的值也来自第一个视图控制器。 这对我有用。

【讨论】:

  • 有没有例子或者你能不能用更多的信息和代码回答这个问题
  • 是的,当然。 @AssamAl-Zookery
  • 它在第一个视图控制器中工作,但是当我尝试在我的第二个视图控制器中使用 Mystr 时它不起作用错误:架构 i386 的未定义符号:“_Mystr”,引用自:
  • 你在第二个视图控制器中导入第一个视图。
  • 我已经在第二个视图控制器中导入了第一个视图控制器,但我仍然收到相同的错误:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用).. 请您尝试做它,如果它工作正常。请你分享更多可以让我更好地理解我做错了什么。
【解决方案2】:

或者简单地添加一个 AppDelegate 属性来将变量存储在两个 ViewController 中:

AppDelegate *appDel=[[UIApplication sharedApplication] delegate];
appDel.variable=@"text";

【讨论】:

    【解决方案3】:

    您可以在 App delegate 中保存数据并在应用程序中跨视图控制器访问它。您必须创建 app delegate 的共享实例。

    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    

    像这样

    假设你声明了一个NSString object *str然后你可以通过appDelegate.str在任何视图控制器中访问它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多