我正在使用準備爲segue發送字符串到下一個控制器。它被設置爲一個字符串直到被髮送(根據NSLog),但只要我登錄到下一個控制器,它就是一個NSObject而不是一個字符串,因此該值已成爲空值。準備segue NSString成爲NSObject?
這是第一個視圖控制器的bodyText的領域是什麼,我試圖跨越發送到下一個視圖控制器:
#import "GFAddPostTextViewController.h"
#import "GFSelectGroupViewController.h"
@interface GFAddPostTextViewController()
@property (weak, nonatomic) IBOutlet UITextField *bodyTextField;
@end
@implementation GFAddPostTextViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"selectGroup"]) {
GFSelectGroupViewController *destViewController = segue.destinationViewController;
destViewController.bodyText = self.bodyTextField.text;
NSLog(@"%@", destViewController.bodyText);
}
}
@end
這裏是接收視圖控制器的頭文件:
#import <UIKit/UIKit.h>
@interface GFSelectGroupViewController : UITableViewController
@property (weak, nonatomic) IBOutlet NSString *bodyText;
@end
最後接收視圖控制器的實現文件(保存方法是我稱之爲self.bodyText和它出錯,因爲它認爲bodytext爲空):
#import "GFSelectGroupViewController.h"
#import <AFNetworking.h>
#import "GFCredentialStore.h"
#import "GFGroupResponseSerializer.h"
#define kBaseURL "http://someserver.com/"
#define kGroupURL "groups.json"
#define kPostURL "posts.json"
@interface GFSelectGroupViewController()
@property (nonatomic, strong) NSArray *groups;
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *saveButton;
@end
@implementation GFSelectGroupViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
GFCredentialStore *credentialStore = [[GFCredentialStore alloc] init];
NSString *authToken = [credentialStore authToken];
NSLog(@"%@", authToken);
__weak typeof(self)weakSelf = self;
[self.saveButton setTarget:self];
[self.saveButton setAction:@selector(save:)];
NSString *urlString = [NSString stringWithFormat:@"%s%s", kBaseURL, kGroupURL];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [GFGroupResponseSerializer serializer];
[manager.requestSerializer setValue:authToken forHTTPHeaderField:@"auth_token"];
NSLog(@"%@", manager.requestSerializer.HTTPRequestHeaders);
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
__strong typeof(weakSelf)strongSelf = weakSelf;
strongSelf.groups = (NSArray *)responseObject;
[strongSelf.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
-(void)save:(id)sender {
NSString * postURL = [NSString stringWithFormat:@"%s%s", kBaseURL, kPostURL];
NSString *body = self.bodyText;
NSLog(@"%@", body);
NSDictionary *params = @{ @"post[body]" : body};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:postURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
[self dismissViewControllerAnimated:NO completion:nil];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
iOS新手,所以任何幫助高度讚賞。謝謝。
你有一個NSString作爲IBOutlet的東西似乎有點奇怪,應該是UILabel還是什麼? –
從你的字符串中刪除'IBOutlet',使它成爲'copy'(而不是'weak')並且給它一個... – Alladinian
你有一個弱'NSString'屬性 - 這意味着如果你指定一個對象該屬性,並沒有其他'strong'引用指向它,它將被釋放 - 看看http://stackoverflow.com/questions/11013587/differences-between-strong-and-weak-in-jective -c –