开发者

How to sync a section in a MutableArray with UITextView

开发者 https://www.devze.com 2023-02-18 01:17 出处:网络
I have one MutableArray (NSMutableArray *NoteBook;) in which I would like to store Notepages (I set up an object called NotePage.m which simply contains one NSString *noteText and a method to setNoteT

I have one MutableArray (NSMutableArray *NoteBook;) in which I would like to store Notepages (I set up an object called NotePage.m which simply contains one NSString *noteText and a method to setNoteText). I also have an integer to keep track of my pages (NSUInteger currentPageCounter;).

I start my little program by setting up a new instance of NotePage:

NotePage *newPage = [[NotePage alloc] init];
[newPage setNoteText:@"Sample Text for a certain page..."];

I then copy this *newPage 3 times into my NoteBook Mutable Array:

[self.NoteBook insertObject:newPage atIndex:(self.currentPageCounter)]; 

This will give me 3 pages, at the indices 0,1,2. So far so good. Everything works splendid. But now comes the enemy, UITextView. First of all, I would like to display the contents of a page within my NoteBook in an UITextView. So I did this to sync one section in the MutableArray (e.g. page at index 0) with the UITextView which works fine:

NotePage *thisPage = [self.NoteBook objectAtIndex:self.currentPageCounter]; 
TextViewNote.text = thisPage.noteText;

The problem is, however, if I want to edit my UITextView a开发者_开发问答nd sync the updated text with the MutableArray. This is where the crashing happens... I have coded this in a separate method which can be clicked once the user is done editing the UITextView:

    -(IBAction) savePage
{
    NSString *tempString;
    tempString = [NSString stringWithFormat:@"%@",TextViewNote.text];

    NotePage *newPage = [[NotePage alloc] init];
    [newPage setNoteText:tempString];

    [self.NoteBook insertObject:newPage atIndex:(self.currentPageCounter)]; // e.g. at index 0 for page 1
    [self.NoteBook removeObjectAtIndex:(currentPageCounter+1)]; // i.e. this is to remove the old page 1 which used to be at index 0 but now is at index 1

    [self syncTextView];
    [self syncCounter];

}

I guess there is a less cumbersome way (I'm still a beginner...) to simply replace an object at a certain index at a Mutable Array. As it stands now, it will simply crash once I try to move onwards to the next index position which is apparently not found anymore.

Thanks for any ideas!


I guess there is a less cumbersome way (I'm still a beginner...) to simply replace an object at a certain index at a Mutable Array.

Indeed. Look at -[NSMutableArray replaceObjectAtIndex:withObject:].

Considering the error you posted, it sounds like you've got a bad pointer somewhere. The error is complaining that somewhere, a -[UITouchData length] message is being sent to an instance of NotePage. Turn on the 'Stop on Objective-C Exceptions' option in the debugger (under the Run menu). That should help you see where the problem is occurring.


NSMutableArray has a method replaceObjectAtIndex:withObject: that should do what you are trying to do.

You've got a memory management issue, however, unless you are calling release on the newPage after you add it to the array. Unless you are planning on making the NotePage class more complex, it might make sense simply to change the item's text rather than substituting a new object:

[[self.noteBook objectAtIndex:currentPageCounter] setNoteText:tempString];

(Also, be aware that inserting the newPage object into the array four times does not copy the object; it simply inserts the same reference four times. If you want four distinct objects, you will need to allocate four objects in a loop:

for(i = 0; i < 4; i++){
    NotePage *newPage = [[NotePage alloc] init];
    [newPage setNoteText:@"Dummy text"];
    [self.notebook addObject:newPage];
    [newPage release];
}
0

精彩评论

暂无评论...
验证码 换一张
取 消