标签: nsmutablearray

objective-c"发送到immutable对象的mutating方法"错误

我对objective-c很新,并尝试为iphone创建一个小应用程序.
我差不多完成了这个小错误.实际上,我已经用谷歌搜索了几个小时来找到一个合适的解决方案但不幸的是我无法找到一个有效的解决方案.
我在这里使用这个教程来构建一个UITableView:UITableView Tutorial 完整的错误消息如下所示:

*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'* - [NSCFArray insertObject:atIndex:]:发送到不可变对象的mutating方法'

这是数据控制器标题:MyLinksDataController.h

@interface MyLinksDataController : NSObject {

NSMutableArray *tableList; //<---important part

}

- (unsigned)countOfList;
- (id)objectInListAtIndex:(unsigned)theIndex;
- (void)addData:(NSString *)data; //<---important part
- (void)removeDataAtIndex:(unsigned)theIndex;

@property (nonatomic, copy, readwrite) NSMutableArray *tableList; //<---important part

.....
Run Code Online (Sandbox Code Playgroud)

和数据控制器方法:MyLinksDataController.m

#import "MyLinksDataController.h"

@implementation MyLinksDataController

@synthesize tableList;

- (id)init {

    if (self = [super init]) {

        NSLog(@"Initilizing DataController");
        //Instantiate list
        NSMutableArray *localList = [[NSMutableArray alloc] init];
        self.tableList = [localList copy];
        [localList release];

        //Add initial Data
        [self addData:@"AAAAAAAAAAAAAA"];
        [self addData:@"BBBBBBBBBBBBBB"]; …
Run Code Online (Sandbox Code Playgroud)

objective-c immutability nsstring nsmutablearray

7
推荐指数
2
解决办法
2万
查看次数

检查NSMutableArray中的索引是否存在数据

我有一个NSMutableArray,我想在其中插入数据,问题是我首先要检查我插入数据的索引是否存在.怎么做?我尝试类似的东西,但没有任何工作:

if ([[eventArray objectAtIndex:j] count] == 0)
Run Code Online (Sandbox Code Playgroud)

要么

if (![eventArray objectAtIndex:j])
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c nsmutablearray

7
推荐指数
1
解决办法
1万
查看次数

NSMutableArray与核心数据= WORKS一起存储,但在更改数组后不能正常工作

我有一个带有NSMutableArray的NSManagedObject作为属性:

@interface MyObject :  NSManagedObject  
{
}

@property (nonatomic, retain) id a1;
Run Code Online (Sandbox Code Playgroud)

在数据模型中,它被声明为Transformable.我将Value Transformer字段保留为默认值(浅灰色)NSKeyedUnarchiveFromData.

a1是作为对象的一部分创建的:

MyObject  *theObject = [NSEntityDescription insertNewObjectForEntityForName:@"MyObject" inManagedObjectContext: myManagedObjectContext];
Run Code Online (Sandbox Code Playgroud)

并初始化:

a1 = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

对象添加到a1中 [a1 insertObject:[NSNumber numberWithInt:0] atIndex: 0 ];

然后我在所有这些之后保存上下文.加载上下文后,将保存并加载存储在a1中的所有元素.ALL WORKS WELL!

但是当现在a1更改时,例如通过向a1添加一个元素或更改a1中的任何元素并保存并加载上下文,a1的内容为UNCHANGED(它保持与所有更改发生之前完全相同). CHANGES DON'T WORK!

顺便说一下,当应用程序运行时,对a1的所有更改都存储在a1中.

拜托,你能帮忙 - 这里发生了什么?

非常感谢您的帮助!

xcode core-data nsmutablearray

7
推荐指数
1
解决办法
7953
查看次数

UItableView上的多个NsfetchedResultsController

我在执行2 nsfetchedresultsController中遇到困难tableView.我想在表的每个部分(2个部分)中使用fetchedresultsController,如下所示:

收藏

  • 产品
  • 产品2

买

  • 产品3

我知道对于这个例子我不需要2 nsfetchedResultsController但我稍后会需要它.

当我从一个nsfetchedResultsController删除一个产品,它传递给另一个,我得到这个错误:

无效更新:第0节中的行数无效.更新(0)后现有部分中包含的行数必须等于更新前的该部分中包含的行数(0),加上或减去数字从该部分插入或删除的行数(插入1个,删除0个).with userInfo(null)"

我认为这是因为当第一个fetchedRController检测到更改时,它会在第二个调用之前更新tableView,是吗?我应该使用NSMutableArrays并手动更新tableView吗?

代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
NSInteger numberOfRows = 0;

switch (section)
{
    case WISHLIST_SECTION:

    {
        numberOfRows =[[fetchedResultsControllerwish fetchedObjects]count];


    };
         break;

    case PURCHASED_SECTION:
    {   
        numberOfRows =[[fetchedResultsControllerPurchased fetchedObjects]count];

    };
        break;


    default:
        break;
}
return numberOfRows;
}

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller is about to start sending change notifications, so prepare the table view for updates.
[self.tableView beginUpdates];
}


- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ …
Run Code Online (Sandbox Code Playgroud)

iphone uitableview nsmutablearray nsfetchedresultscontroller

7
推荐指数
1
解决办法
9085
查看次数

如何将字符串拆分为NSMutableArray

我想将字符串拆分为NSMutableArray

我知道

- (NSArray *)componentsSeparatedByString:(NSString *)separator
Run Code Online (Sandbox Code Playgroud)

是可用的但是这个NSArray不是为了NSMutableArray.

我需要因为在分裂后我想通过使用从数组中删除元素

-(void)removeObjectAtIndex:(NSUInteger)index
Run Code Online (Sandbox Code Playgroud)

这是NSArray无法实现的.

谢谢

string iphone split nsmutablearray

7
推荐指数
2
解决办法
1万
查看次数

iPhone SDK Xcode - 如何获取文档目录中的所有文件名

我想获取应用程序documents文件夹中的所有文件名,并将它们放在一个文件夹中NSMutableArray.没有更多,没有更少.

nsmutablearray nsarray ios nsdocumentdirectory

7
推荐指数
1
解决办法
3574
查看次数

如何按字母顺序对NSMutable数组中的自定义对象字段进行排序?

我有一个自定义对象,如:

#import <Foundation/Foundation.h>

@interface Store : NSObject{
    NSString *name;
    NSString *address;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *address;

@end
Run Code Online (Sandbox Code Playgroud)

我有一个包含Store对象的NSMutableArray(storeArray)数组:

store1 = [[Store alloc] init];
store1.name = @"Walmart";    
store1.address = @"walmart address here..";

store2 = [[Store alloc] init];
store2.name = @"Target";
store2.address = @"Target address here..";

store3 = [[Store alloc] init];
store3.name = @"Apple Store";
store3.address = @"Apple store address here..";

//add stores to array
storeArray = [[NSMutableArray alloc] init];
[storeArray addObject:store1];
[storeArray addObject:store2];
[storeArray addObject:store3]; …
Run Code Online (Sandbox Code Playgroud)

objective-c nsmutablearray ios

7
推荐指数
2
解决办法
3260
查看次数

NSMutableArray:删除所有对象或初始化新的NSMutableArray是否更快?

即使这对我的代码影响微乎其微,但我想了解一个操作是否比另一个更昂贵:-).

cocoa objective-c nsmutablearray

7
推荐指数
1
解决办法
1095
查看次数

更改NSMutableArray中所有对象的属性

我有NSMutableArray9个对象.这些对象有很多属性,如questionName,questionWhatRow等.

我希望能够为其中的所有对象更改其中一个属性NSMutableArray.

这是我的NSMutableArray类.

-(id) init
{
    self = [super init];

    if (self)
    {
        self.questionsArray = [[NSMutableArray alloc] init];

        Question *newQuestion = [[Question alloc] init];
        newQuestion.questionName = @"What is the name of the girl who has to fetch water for her family every day?";
        newQuestion.questionRowName = @"Question 1";
        newQuestion.questionAnswer = @"Nya";
        newQuestion.questionHint = @"Maybe if you read the book you would know";
        newQuestion.questionWhatRow = @"Nya";
        newQuestion.questionCompleteOrNot = @"No";
        newQuestion.pointForQuestion = 1; …
Run Code Online (Sandbox Code Playgroud)

properties objective-c nsstring nsmutablearray

7
推荐指数
1
解决办法
1237
查看次数

找出NSArray/NSMutableArray会改变指数

我有一个NSMutableArray oldArray.现在,在某一点上,这个NSMutableArray对象会被另一个对象更新,这个对象NSMutableArray可能具有比前一个更多,更少或相同数量的元素NSMutableArray.

我想比较旧数组和新数组的变化.我想有两个NSArray小号addedArray和removedArray其中将包含已添加和/或删除旧的数组中的元素的索引.

通过一个例子,整个问题将更加清晰:

oldArray = {@"a",@"b",@"d",@"e",@"g"};

newArray = {@"a",@"c",@"d",@"e",@"f",@"h"};
Run Code Online (Sandbox Code Playgroud)

因此,这里删除的对象分别是索引1和4处的@"b"和@"g".并且在索引1,4和5处添加的对象是@"c",@"f"和@"h"(删除第一个对象,然后添加).

因此,

removedArray = {1,4};  and  addedArray = {1,4,5};
Run Code Online (Sandbox Code Playgroud)

我想要一种有效的方法来获得这两个数组 - removedArray以及addedArray来自旧的和新的NSMutableArray.谢谢!如果问题不是很容易理解,我愿意提供更多信息.

编辑1

如果我解释一下我想要用什么,也许会更清楚.

实际上我正在使用的是在加载tableview之后使用方法insertRowsAtIndexPaths和removeRowsAtIndexPaths动画更新UITableView ,以便用户可以看到删除的行熄灭并且新行进入.tableview存储用户可以使用的收藏夹元素添加或删除.添加一些收藏夹后删除一些; 当用户返回收藏夹表视图时,将显示动画.

编辑2

本来应该提到过这个,但是旧数组和新数组中的元素都是按升序排列的.只有删除或添加的指标才有意义.订单无法更改.恩.{@"b",@"a",@"c",@"d"}不能是数组.

objective-c nsmutablearray nsarray ios

7
推荐指数
1
解决办法
1212
查看次数