菜鸟教程小白 发表于 2022-12-13 14:25:44

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


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

<p>FriendsController.m:</p>

<pre><code>- (void)viewDidLoad {
    ;
    arrayOfNames=[ init];
    arrayOfIDs=[ init];
    userName=[ init];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    long long fbid = [longLongValue];
    NSString *user=;
    ;

    userName=];
    FriendDetail *profileDetailName = [ initWithNibName: @&#34;FriendDetail&#34; bundle: nil];

    profileDetailName.nameString=userName;

    ;
}

- (void)request:(FBRequest *)request didLoad:(id)result{
    if (]) {
      transferImage = [ initWithData: result];
      FriendDetail *profileDetailPicture = [ initWithNibName: @&#34;FriendDetail&#34; bundle: nil];

      ;
      profileDetailPicture.profileImage.image= transferImage;

      profileDetailPicture.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
      ;

      ;
    }   
}
</code></pre>

<p>在 FriendDetail.h 中</p>

<pre><code>NSString nameString;
IBOutlet UILabel *profileName;
@property (nonatomic, retain) UILabel *profileName;
@property (nonatomic, retain) NSString *nameString;
</code></pre>

<p>在 FriendDetail.m 中</p>

<pre><code>- (void)viewDidLoad
{
    ;
    profileName.text=nameString;
}
</code></pre>

第二个 Controller(FriendDetail) 中的 <p><code>nameString</code> 返回 <code>nil</code>。当我在 firstcontroller 中设置断点时,我看到 <code>nameString</code> 内部的字符串是正确的,但之后它以某种方式返回到 <code>nil</code>。</p>

<p>-----------编辑----------- ------------------</p>

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

<pre><code> FriendDetail *friendController;
@property (strong, nonatomic) FriendDetail *friendController;
</code></pre>

<p>FriendsController.m</p>

<pre><code>- (void)viewDidLoad
{
    ;
    arrayOfNames=[ init];
    arrayOfIDs=[ init];
    arrayOfThumbnails=[ init];
    userName=[ init];

    friendController= [ initWithNibName: @&#34;FriendDetail&#34; bundle: nil];
}

-(void)request:(FBRequest *)request didLoad:(id)result{
    if (])
    {
      transferImage = [ initWithData: result];
      friendController.nameString=userName;

      ;
      friendController.profileImage.image= transferImage;


       friendController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
      ;
    }
   //this is how i take facebook friends list
         if (]){
             items = [[(NSDictionary *)result objectForKey:@&#34;data&#34;]retain];
             for (int i=0; i&lt;; i++) {
            NSDictionary *friend = ;
            long long fbid = [longLongValue];
            NSString *name = ;
            NSLog(@&#34;id: %lld - Name: %@&#34;, fbid, name);
            ];
            ];

      }
    }
}

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

    long long fbid = [longLongValue];
    NSString *user=;

    userName=];

    ;
   
}
</code></pre>

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

<p>如果我删除 <code>didSelectRowAtIndexPath:</code> 中的 <code></code> 它仍然会发送 <code>nil</code> 到 <code>nameString</code></p >

<p>当我在 <code>didSelectRowAtIndexPath:</code> 行 `</p> 处设置断点时

<pre><code>userName=]`
</code></pre>

<p>我可以看到 <code>userName = @"Adam Dart"</code> 这是正确的</p>

<p>在 <code>friendController.nameString=userName;</code> 行的第二个断点中,我看到 <code>nameString =nil</code> 和 <code>userName = Variable 不是 CFString</code></p>

<p>ARC 设置为 NO</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>该值为 nil,因为您没有在 <code>request:didLoad:</code> 函数中传递该值。</p>

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

<pre><code>FriendDetail *profileDetailName = [ initWithNibName: @&#34;FriendDetail&#34; bundle: nil];
profileDetailName.nameString = userName;
;
</code></pre>

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

<p>你需要做的是,首先记住<code>didSelectRowAtIndexPath</code>中点击行的名称,这里你不必创建ViewController实例。请求完成后,将图像和名称都设置给 Controller ,然后呈现。但是你应该避免用户同时点击不同的行,因为你不知道请求什么时候完成。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - NSMutableArray 到 NSString 并将 NSString 传递到另一个 ViewIOS5.1,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11182966/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11182966/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - NSMutableArray 到 NSString 并将 NSString 传递到另一个 View IOS5.1