gpt4 book ai didi

objective-c - 为什么属性(property)会基本上消失? Obj-C, cocoa

转载 作者:行者123 更新时间:2023-12-03 17:55:53 26 4
gpt4 key购买 nike

我真的很困惑。我有一个应用程序,其中有一个用于存储项目详细信息的类。称为LEItem。这些项目存储在带有标记为 LEItemStore 的类的存储中。我有一个包含所有项目的表格的 View 。这很好用。如果您点击一行,它会将此消息发送到 LogbookFirstViewController。

 LogbookFirstViewController *logController = [[LogbookFirstViewController alloc] initForNewItem:NO];

NSArray *items = [[LEItemStore sharedStore] allItems];
LEItem *selectedItem = [items objectAtIndex:[indexPath row]];

NSString *description = [selectedItem description];
NSLog(@"%@", description);

[logController setItem:selectedItem];
[self dismissViewControllerAnimated:YES completion:nil];

那是在 TableView 类中。在 LogbookFirstViewController.m 中我有

-(void)setItem:(LEItem *)i{
item = i;
NSString *t = [item description];
NSLog(@"In LogbookFirstViewController, returning %@", t);
}

这就是奇怪的地方。这样可行。它输出正确的项目,因此我认为一切都会好起来的。但事实并非如此。 item 是一个类级属性,因此它应该保留,但事实并非如此。在同一个类中,我重写了这个方法。

-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

//NSString *string = [item description];
//NSLog(@"Item = %@", string);
NSLog(@"View did Appear:animated");
int glucoseValue = [item glucose];

NSString *glucoseString = [NSString stringWithFormat:@"%d", glucoseValue];
[glucoseField setText:glucoseString];

int proteinValue = [item protein];
NSString *proteinString = [NSString stringWithFormat:@"%d", proteinValue];
[proteinField setText:proteinString];

int carbsValuue = [item carbs];
NSString *carbsString = [NSString stringWithFormat:@"%d", carbsValuue];
[carbsField setText:carbsString];

int insulinValue1 = [item insulin];
NSString *insulin1String = [NSString stringWithFormat:@"%d", insulinValue1];
[insulinField1 setText:insulin1String];

int insulinValue2 = [item insulin2];
NSString *insulinString2 = [NSString stringWithFormat:@"%d", insulinValue2];
[insulinField2 setText:insulinString2];



//NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
//[dateFormatter setDateStyle:NSDateFormatterShortStyle];
//[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
//NSLog(@" The item was created on %@", [dateFormatter stringFromDate:[item dateCreated]]);
//[dateButton setTitle:[dateFormatter stringFromDate:[item dateCreated]] forState:UIControlStateNormal];
NSString *t = [item description];
NSLog(@"Loading view... Returns: %@", t);
}

我知道这不是最干净的代码,但想法是相同的。它使用与 setItem: 方法完全相同的代码。然而,这总是返回(null)。为什么?该属性似乎在 viewWillAppear 处丢失。

谢谢。

编辑

我解决了这个问题。正如您所看到的,下面检查的答案确实给出了正确的想法,这就是我为解决该问题所做的事情。问题是当我发送 setItem: 我使用此代码来获取 LogbookFirstViewController

 LogbookFirstViewController *logController = [[LogbookFirstViewController alloc] initForNewItem:NO];

据我所知,这创建了 LogbookFirstViewController 的一个新实例,因此,现有实例不会更改其 Item 属性,因为属性已分配给一个实例。因此,我只是更改了这个“不可见”属性的 Item 值。

要解决这个问题,必须获取 viewController 的现有实例。为此,我执行了以下操作:

在 LogbookFirstViewController.h 中我添加了此属性

@property (assign) LogbookFirstViewController *instance;

然后,在您的 .m 中合成实例,并在同一位置将其添加到 viewDidLoad

- (void)viewDidLoad
{
instance = self;
...

然后,在另一个 viewController,entriesViewController 中,我也将其添加到 .h

@property (nonatomic, strong) LogbookFirstViewController *logController;

合成它。然后,我以同样的方式使用我的 didSelectRowAtIndexPath,只需使用现有的 logController

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


NSArray *items = [[LEItemStore sharedStore] allItems];
LEItem *selectedItem = [items objectAtIndex:[indexPath row]];

NSString *description = [selectedItem description];
NSLog(@"%@", description);
NSLog(@"Setting controller: %@", logController);
[logController setItem:selectedItem];
[self dismissViewControllerAnimated:YES completion:nil];
}

然后就可以了!

最佳答案

您在其中创建了 LogbookFirstViewController ,但实际上并没有使其显示任何内容(推送或呈现)。由于它是一个局部变量,因此加载其 View 的该 Controller 的任何实例似乎都与您在显示的代码中初始化的实例不同。

您可以通过添加几行 NSLog 来验证这一点,例如:

NSLog(@"Setting controller: %@", logController);  // Insert before existing line
[logController setItem:selectedItem];

...还有...

[super viewWillAppear:animated];
NSLog(@"Viewing controller: %@", self); // Insert after existing line

为了让事情按照你想要的方式工作,这些必须打印相同的地址。

关于objective-c - 为什么属性(property)会基本上消失? Obj-C, cocoa ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com