2011-01-02 9 views
0

나는 약간의 딜레마가 있으며 좋은 사람들이 나에게 프로그래밍 전문 지식을 빌려줄 수 있는지 궁금해하고 있었다. 여기서 간단하고 정확하게하려고 노력할 것입니다.iPhone이 다른 viewController에서 NSMutableArray에 추가

저는 새로운 IOS 개발자이며 몇 달 동안 만 학습했습니다. 나는 대학에서 내 논문을위한 아이폰 응용 프로그램을 개발 중이다. 이 응용 프로그램은 자습서로 구성된 iPhone 자체 용으로 개발하고자하는 사람들을위한 안내서입니다. 수많은 테이블 뷰로 구성되어 있지만, 저에게 난처한 점이 하나 있습니다.

무엇을하려고합니까 : 내 앱에 포함하려는 기능 중 하나가 북마크 기능이며 탭 표시 줄에서 액세스 할 수 있습니다. 기존 NSMutableArray에 문자열을 추가하는 모든 nib 파일 (자습서)에서 버튼을 클릭 할 수 있기를 원합니다. 이 문자열은 IB-Action이 수행 된 튜토리얼의 이름과 일치하며 배열에 추가 된 후 인덱스 경로에서 행을 선택할 때 nib 파일을로드 할 수 있습니다.

문제점 : 배열을 포함하는 구현 파일에서 배열에 개체를 추가 할 수 있지만 다른 구현 파일에서 추가하는 방법을 알 수 없습니다. UITable 뷰는 배열에서 완벽하게 채워지지만 새로운 항목을 추가하는 것은 또 다른 이야기입니다.

나는 내 코드를 보여줄 것이지만, 관련이없는 것은 제외 할 것입니다.

BookmarksViewController.h

@interface BookmarksViewController : UITableViewController { 
NSMutableArray *bookmarksArray; 
} 

@property (nonatomic, retain) NSMutableArray *bookmarksArray; 
@end 

BookmarksViewController.m 제 VIEW 제어기

FOR NOW

-(void)viewDidLoad { 

bookmarksArray = [[NSMutableArray alloc] init]; 

NSLog(@"String Added"); 
    [bookmarksArray addObject:@"String"]; 
    [super viewDidLoad]; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Configure the cell... 
    cell.textLabel.text = [bookmarksArray objectAtIndex:indexPath.row]; 
    return cell; 
} 

-(void)dealloc { 
[bookmarksArray release]; 
    [super dealloc]; 
} 

Ch01GettingStarted.h

-(IBAction) pushChap01Bookmark:(id)sender{ 

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init]; 

[bookmarksViewController.bookmarksArray addObject:@"NewString"]; 
NSLog(@"ADD ENTRY"); 
[bookmarksViewController.tableView reloadData]; 
NSLog(@"RELOAD TABLE"); 
[bookmarksViewController release]; 
NSLog(@"ADD BOOKMARK RELEASE"); 
} 

@interface Ch01GettingStarted : UIViewController { 
IBOutlet UIScrollView *ScrollView; 
} 
-(IBAction) pushChap01Bookmark:(id)sender; 

@end 

Ch01GettingStarted.m은 BTW - IB에-조치 헤더 파일에 선언했다.

아, 원래 '[BookmarksViewController.bookmarksArray addObject : @ "NewString"];' 그러나 나는 "expected": 'at' '이라는 오류를 보았고, bookmarkViewController의 인스턴스 변수를 사용해야하므로 어딘가에서 읽고 addObject 메소드 바로 위에 선언했습니다.

오랫동안이 작업을 해오지 않았으므로 나에게 친절하게 대해주십시오.하지만 이것은 내 전문적인 미래의 큰 부분이 될 것입니다.

누구든지 내게 제공 할 수있는 통찰력은 마법이 될 것입니다.

감사합니다. 감사합니다.

+0

빠른 팁 : 질문에서 코드를 선택하고 툴바에서 '{}'버튼을 누르십시오. 코드를 블록에 넣고 글꼴을 변경하여 읽기가 훨씬 쉬워집니다. –

답변

1

문제는이 방법에있다

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init]; 

당신은 그렇게하고 싶지 않아 당신 때문에 현재보기 컨트롤러를 업데이트하려고합니다. Ch01GettingStarted에서 링크를 만들어야합니다.

Interface Builder를 사용한다고 가정하면 IBOutlet을 사용하여이 링크를 만들 수 있습니다.

IBOutlet BookmarksViewController *bookmarksViewController; 

(괄호 사이)

나는 이미 당신을 생각 인터페이스 빌더에서이 연결하는 방법을 알고 다음 Ch01GettingStarted 인터페이스에 다음 줄을 추가합니다.

BookmarksViewController *bookmarksViewController = [[BookmarksViewController alloc]init]; 

그리고이 라인 :

은 그럼 그냥이 줄을 제거

[bookmarksViewController release]; 

을 그리고 그것은 작동합니다.

왜? 이제 'bookmarksViewController'변수는 실제로 표시되는 원래 객체 (Interface Builder에서 만든 객체)를 참조합니다.

+0

안녕하세요, 귀하의 빠른 답장을 보내 주셔서 감사합니다. '\t IBOutlet BookmarksViewController * bookmarksViewController;'를 추가했습니다. Ch01GettingStarted.h하지만 "expects-qualifier-list before 'bookmarksViewController'"와 함께 나오는 이유는 무엇입니까? 미안하지만 인터페이스 빌더 중 하나에 연결하는 방법에 대해 너무 명확하지 않습니다. 나는 UIViewController를 추가하고 그것을 링크한다고 가정한다. 이것이 옳은가 틀린가? 고맙습니다, 병 들고 계속 노력하세요. –

+0

좋아, 헤더 파일에 "BookmarksViewController.h"를 가져오고 오류가 사라졌지만 버튼을 클릭하면 프로그램이 중단됩니다. –

+0

매우 좋았습니다. 오류 메시지 란 무엇입니까? (당신을 위해 '콘솔'을 열어야합니다.) –

0

BookmarksViewController.m에이 메서드가 있습니까?

-(IBAction) pushChap01Bookmark:(id)sender 

당신은이 작업을 수행하여, 여기 NEW bookmarksViewController을 만들 :

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    [bookmarksArray count]; 
} 
+0

있습니다. - (NSInteger) tableView : (UITableView *) tableView numberOfRowsInSection : (NSInteger) 섹션 { \t return [bookmarksArray count]; } 감사합니다 –

0

이후 bookmarksViewController이 작성되었습니다. ViewDidLoad 메서드가 아직 실행되지 않습니다. bookmarksArray가 생성되지 않았습니다. 그래서 bookmarksArray = nil. 객체를 nil 객체에 추가 할 수 없습니다. 두 번째 Viewcontroller에서는 loadView 메소드에 bookmarksViewController을 작성해야합니다. 그리고 pushChap01Bookmark에 객체를 추가하십시오.

영어가 좋지 않습니다. 당신이 이해할 수 있기를 바랍니다. : D

관련 문제