• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

objective-c - NSMutableArray 到 NSString 并将 NSString 传递到另一个 View IOS5.1

[复制链接]
菜鸟教程小白 发表于 2022-12-13 14:25:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 NSMutableArray 名称。我希望将 NSMutableArray 内的数据(选定名称)作为文本传递给另一个 View 的标签。

FriendsController.m:

- (void)viewDidLoad {
    [super viewDidLoad];
    arrayOfNames=[[NSMutableArray alloc] init];
    arrayOfIDs=[[NSMutableArray alloc] init];
    userName=[[NSString alloc] init];
}

- (void)tableViewUITableView *)tableView didSelectRowAtIndexPathNSIndexPath *)indexPath {
    long long fbid = [[arrayOfIDs objectAtIndex:indexPath.row]longLongValue];
    NSString *user=[NSString stringWithFormat"%llu/picture",fbid];
    [facebook requestWithGraphPath:user andDelegate:self];

    userName=[NSString stringWithFormat"%@",[arrayOfNames objectAtIndex:indexPath.row]];
    FriendDetail *profileDetailName = [[FriendDetail alloc] initWithNibName: @"FriendDetail" bundle: nil];

    profileDetailName.nameString=userName;

    [profileDetailName release];
}

- (void)requestFBRequest *)request didLoadid)result  {
    if ([result isKindOfClass:[NSData class]]) {
        transferImage = [[UIImage alloc] initWithData: result];
        FriendDetail *profileDetailPicture = [[FriendDetail alloc] initWithNibName: @"FriendDetail" bundle: nil];

        [profileDetailPicture view];
        profileDetailPicture.profileImage.image= transferImage;

        profileDetailPicture.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:profileDetailPicture animated:YES];

        [profileDetailPicture release];
    }   
} 

在 FriendDetail.h 中

NSString nameString;
IBOutlet UILabel *profileName;
@property (nonatomic, retain) UILabel *profileName;
@property (nonatomic, retain) NSString *nameString;

在 FriendDetail.m 中

- (void)viewDidLoad
{
    [super viewDidLoad];
    profileName.text=nameString;
}
第二个 Controller (FriendDetail) 中的

nameString 返回 nil。当我在 firstcontroller 中设置断点时,我看到 nameString 内部的字符串是正确的,但之后它以某种方式返回到 nil

-----------编辑----------- ------------------

根据答案,我已经稍微改进了我的代码 FriendsController.h

 FriendDetail *friendController;
@property (strong, nonatomic) FriendDetail *friendController;

FriendsController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    arrayOfNames=[[NSMutableArray alloc] init];
    arrayOfIDs=[[NSMutableArray alloc] init];
    arrayOfThumbnails=[[NSMutableArray alloc] init];
    userName=[[NSString alloc] init];

    friendController= [[FriendDetail alloc] initWithNibName: @"FriendDetail" bundle: nil];
}

-(void)requestFBRequest *)request didLoadid)result{
    if ([result isKindOfClass:[NSData class]])
    {
        transferImage = [[UIImage alloc] initWithData: result];
        friendController.nameString=userName;

        [friendController view];
        friendController.profileImage.image= transferImage;


       friendController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentModalViewController:friendController animated:YES];
    }
   //this is how i take facebook friends list
         if ([result isKindOfClass:[NSDictionary class]]){
             items = [[(NSDictionary *)result objectForKey"data"]retain];
             for (int i=0; i<[items count]; i++) {
            NSDictionary *friend = [items objectAtIndex:i];
            long long fbid = [[friend objectForKey"id"]longLongValue];
            NSString *name = [friend objectForKey"name"];
            NSLog(@"id: %lld - Name: %@", fbid, name);
            [arrayOfNames addObject:[NSString stringWithFormat"%@", name]];
            [arrayOfIDs addObject:[NSNumber numberWithLongLong:fbid]];

        }
    }
}

- (void)tableViewUITableView *)tableView didSelectRowAtIndexPathNSIndexPath *)indexPath
{

    long long fbid = [[arrayOfIDs objectAtIndex:indexPath.row]longLongValue];
    NSString *user=[NSString stringWithFormat"%llu/picture",fbid];

    userName=[NSString stringWithFormat"%@",[arrayOfNames objectAtIndex:indexPath.row]];

    [facebook requestWithGraphPath:user andDelegate:self]; 
    [username retain]
}

现在,当我第一次选择行时,它会发送名称。当我回到 tableview 并选择另一个名称时,它会显示旧名称。

如果我删除 didSelectRowAtIndexPath: 中的 [username retain] 它仍然会发送 nilnameString

当我在 didSelectRowAtIndexPath: 行 `

处设置断点时
userName=[NSString stringWithFormat"%@",[arrayOfNames objectAtIndex:indexPath.row]]`

我可以看到 userName = @"Adam Dart" 这是正确的

friendController.nameString=userName; 行的第二个断点中,我看到 nameString =niluserName = Variable 不是 CFString

ARC 设置为 NO



Best Answer-推荐答案


该值为 nil,因为您没有在 request:didLoad: 函数中传递该值。

在函数didSelectRowAtIndexPath中,你创建了另一个ViewController的本地实例并设置了nameString的值,但是你没有呈现 View 并立即释放ViewController。你实际上在这几行代码中什么都不做:

FriendDetail *profileDetailName = [[FriendDetail alloc] initWithNibName: @"FriendDetail" bundle: nil];
profileDetailName.nameString = userName;
[profileDetailName release];

在函数 request:didLoad: 中,您再次使用图像创建另一个 ViewController 的本地实例。但是这个实例只是这个函数的本地实例,这意味着与 didSelectRowAtIndexPath 中创建的实例无关。

你需要做的是,首先记住didSelectRowAtIndexPath中点击行的名称,这里你不必创建ViewController实例。请求完成后,将图像和名称都设置给 Controller ,然后呈现。但是你应该避免用户同时点击不同的行,因为你不知道请求什么时候完成。

关于objective-c - NSMutableArray 到 NSString 并将 NSString 传递到另一个 View IOS5.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182966/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap