gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:15:08 26 4
gpt4 key购买 nike

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

FriendsController.m:

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)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)request:(FBRequest *)request didLoad:(id)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)request:(FBRequest *)request didLoad:(id)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)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)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

最佳答案

值为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/

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