所以我试图使用本教程iphonedevsdk在两个视图之间传递数据(第一个视图是tableViewController,当单元格被按下时,数据被发送到第二个视图,第二个视图获得了imageView,当数据被发送时显示了图像)。

我在视图中使用相同的 theAppDataObject 方法:

- (AppDataObject*) theAppDataObject
{
    id<AppDelegateProtocol> theDelegate = (id<AppDelegateProtocol>) [UIApplication sharedApplication].delegate;
    AppDataObject* theDataObject;
    theDataObject = (AppDataObject*) theDelegate.theAppDataObject;
    return theDataObject;
}

当按下单元格时,我正在尝试发送数据theAppDataObject.imageString = tempImageString;:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    tempImageString = (((championList *) [self.champions objectAtIndex:indexPath.row]).championImage);

    AppDataObject *theDataObject = [self theAppDataObject];
    NSLog(@"tempIm-g = %@",tempImageString);
    theDataObject.imageString = tempImageString;
    NSLog(@"theAppDataObject.imageString = %@",theDataObject.imageString);

    [self.navigationController popToRootViewControllerAnimated:YES];
}

NSLog输出:

tempIm-g = Champ_0.jpg

theAppDataObject.imageString =(空)

SecondViewController(显示图像):
-(void)viewWillAppear:(BOOL)animated
{
    AppDataObject* theDataObject = [self theAppDataObject];
    UIImage *tempImage = [UIImage imageNamed:theDataObject.imageString];
    NSLog(@"temp image = %@",tempImage);
    [choosenChampionImageView setImage:tempImage];
}

NSLog输出:

临时图像=(空)

我的问题是,AppDataObject.imageString始终为null

我知道可能的解决方案:

不要将AppDataObject用作通用数据容器,而只是将数据保存在appDelegate中。

例如:
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
appdelegate.imageString = tempImageString;

但是我想弄清楚如何使用协议。

我试过的
使DataObject全局化:

view1.h
@interface championsListTableViewController : UITableViewController
{
    NSString *tempImageString;

    AppDataObject* theDataObject;
}

@property(strong,nonatomic) NSString *tempImageString;

@property(strong,nonatomic) AppDataObject* theDataObject;

输出NSLog的(@“theDataObject is%@”,theDataObject); :

theDataObject是(null),这怎么可能?

最佳答案

首先检查theAppDataObject是否为null。

如果为空,则:

用您的界面写AppDataObject* theDataObject;并将属性声明为strong
如果theDelegate.theAppDataObject返回null,则首先分配该对象。

如果不为null,则:

更改此行theAppDataObject.imageString = tempImageString;

theAppDataObject.imageString = [tempImageString retain];

如果使用的是ARC,则将imageString的属性设置为strong

或与此检查
theAppDataObject.imageString = [[NSString alloc] initWthString:tempImageString];

关于iphone - 在 View 之间传递数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12652312/

10-08 21:21