2012-02-20 48 views
8

Tôi đang cố gắng chuyển trở lại từ UIViewController sang UITableViewController của mình nhưng lại không hoạt động theo cách tôi muốn. Tôi đã tạo Giao diện của mình bằng bảng phân cảnh ngay từ đầu, vì vậy tôi không thực sự chuyển từ Chế độ xem này sang chế độ xem khác bằng mã. Cho đến bây giờ, tôi chỉ đẩy Số lượt xem của tôi cho mỗi sergues dễ thực hiện với bảng phân cảnh. Nhưng khi tôi thử di chuyển trở lại các khung nhìn trước đây của tôi, một ViewController mới sẽ được triển khai, vì vậy tất cả dữ liệu của tôi mà tôi lưu trữ trong cái cũ là "bị mất".Di chuyển trở lại từ Bộ điều khiển sang một bộ điều khiển trước

Trên thực tế không có mã tôi có thể giới thiệu bạn (vì sergues) nhưng tình hình là:

-> Tôi có một lưu trữ thứ MutableArray trong UITableView tôi.

-> Người dùng nhấn vào nút quét, quét Mục mới sẽ được nhập trong mảng của tôi.

-> Khi cố gắng đẩy trở lại bảng của tôiXem bộ điều khiển mới đang chờ tôi, không biết dữ liệu tôi đã lưu trữ trong cũ.

Vì vậy, làm thế nào để tôi chỉ cần quay trở lại Bộ điều khiển cũ của mình ngăn chặn để tạo một cái mới tất cả các thời gian?

Có phải một người đi theo phe phái luôn tạo Bộ điều khiển mới không?

(Câu hỏi có thể được đơn giản, nhưng tôi mới để công cụ này thử một số kết quả được trình bày bởi các chức năng tìm kiếm, nhưng không ai trong số họ làm việc :(.)

/chỉnh sửa: Popback vấn đề đã được giải quyết nhưng mảng điền vấn đề vẫn còn tồn tại Mã số:..

GeneralSettings *sharedGS = [GeneralSettings sharedInstance]; 
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; 
[sharedGS.listArray insertObject:strCheckString atIndex:0]; 
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN); 

dữ liệu trong sharedGS.strEAN ("83274572354" tức) dữ liệu trong listArray (null)

Trả lời

20

Bạn không đẩy lùi Điều đó tạo ra một trường hợp mới của lớp điều khiển trước đó, bạn bật trở lại. Bạn có thể hoàn thành 2 cách đó.

1: Trong mã được đặt trong câu sau đây khi bạn muốn trả lại (pop) cho bộ điều khiển xem máy tính bảng của bạn.

[self.navigationController popViewControllerAnimated:YES];

2: Nếu bạn muốn làm điều đó trong kịch bản bạn cần phải thực hiện các lớp tùy chỉnh segue sau:

thực hiện

// PopSegue.m 

#import "PopSegue.h" 

@implementation PopSegue 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
[src.navigationController popViewControllerAnimated:YES]; 
} 

và tiêu đề

// PopSegue.h 

#import <UIKit/UIKit.h> 

@interface PopSegue : UIStoryboardSegue 

@end 

Đặt phương thức này trong UIViewController của bạn để thiết lập một pr hoạt động trở lại UITableViewController của bạn:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"goBackToTableView"]) { 
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}]; 
    } 
} 
+0

Cảm ơn! tôi đang sử dụng một trong những đầu tiên bởi vì nó sẽ là một chút quá khổ để tạo ra một lớp mới cho một đĩa đơn nhạc pop trở lại. NHƯNG mảng của tôi vẫn không hoạt động như dự định ... Tôi nhìn lên biến của tôi và dữ liệu của tôi là có ("432436274" ví dụ) nhưng khi tôi cố gắng để thêm nó vào mảng của tôi với một addObject hoặc insertObject: atIndex cmd, theres no điều xảy ra. Bạn có thể giúp tôi ở đó không? – blaluma

+0

Mã có dạng: 'GeneralSettings * sharedGS = [GeneralSettings sharedInstance]; sharedGS.strEAN = [[NSString alloc] initWithString: strCheckString]; [sharedGS.listArray insertObject: strCheckString atIndex: 0]; NSLog (@ "Anzahl der EAN-Mã:% d \ nMã số:% @ \ n Trong biến:% @", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex: 0], sharedGS.strEAN); ' Định dạng mã không hoạt động hoặc tôi đang làm sai? 'Ma cua toi' ? – blaluma

+0

Bạn có thể thiết lập giao thức đại biểu và ủy quyền, nhưng cách đơn giản hơn là sử dụng tùy chọn thứ hai. Cách thứ hai là khá dễ dàng - chỉ cần sao chép mã của tôi vào một lớp khách quan-c mới. Sau đó, trong UIViewController thực hiện một phương thức prepareForSegue và thiết lập một thuộc tính trên bộ điều khiển xem đích (UITableViewController) của bạn. Tôi sẽ đăng phương thức prepareForSegue vào có thể trả lời ở trên. –

3

@T.J Khi áp dụng phương pháp này "2: Nếu bạn muốn làm điều đó trong kịch bản bạn cần phải thực hiện các lớp tùy chỉnh segue sau:

thực hiện"

và theo the document những điều sau đây, "Cấu hình Bộ điều khiển Destination khi một Segue được kích hoạt iOS thực hiện các nhiệm vụ sau khi một segue được kích hoạt:.

Nó instantiates điều khiển xem nơi Nó khởi tạo một đối tượng segue mới chứa tất cả các thông tin cho segue được kích hoạt 012.351.Lưu ý: Khoảng cách cửa sổ bật lên cũng cung cấp thuộc tính xác định trình điều khiển cửa sổ bật lên được sử dụng để điều khiển bộ điều khiển chế độ xem đích. Nó gọi phương thức prepareForSegue: sender: của bộ điều khiển xem nguồn, truyền trong đối tượng segue mới và đối tượng đã kích hoạt segue. Nó gọi phương thức thực hiện của segue để đưa bộ điều khiển đích lên màn hình. Hành vi thực tế phụ thuộc vào loại segue đang được thực hiện. Ví dụ, một phân đoạn phương thức cho bộ điều khiển xem nguồn để trình bày bộ điều khiển xem đích. Nó giải phóng đối tượng segue và segue hoàn tất. "

Nó instantiates trình bàyController một lần nữa, sau đó dealloc sau khi phương pháp overrid" thực hiện "được gọi là Vì vậy, nó là tốt hơn để chọn phương pháp đầu tiên bạn gửi hoặc methodof các đại biểu theo the document.

Cảm ơn

Các vấn đề liên quan