我对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) 我有一个NSMutableArray,我想在其中插入数据,问题是我首先要检查我插入数据的索引是否存在.怎么做?我尝试类似的东西,但没有任何工作:
if ([[eventArray objectAtIndex:j] count] == 0)
Run Code Online (Sandbox Code Playgroud)
要么
if (![eventArray objectAtIndex:j])
Run Code Online (Sandbox Code Playgroud) 我有一个带有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中.
拜托,你能帮忙 - 这里发生了什么?
非常感谢您的帮助!
我在执行2 nsfetchedresultsController中遇到困难tableView.我想在表的每个部分(2个部分)中使用fetchedresultsController,如下所示:
收藏
买
我知道对于这个例子我不需要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
我想将字符串拆分为NSMutableArray
我知道
- (NSArray *)componentsSeparatedByString:(NSString *)separator
Run Code Online (Sandbox Code Playgroud)
是可用的但是这个NSArray不是为了NSMutableArray.
我需要因为在分裂后我想通过使用从数组中删除元素
-(void)removeObjectAtIndex:(NSUInteger)index
Run Code Online (Sandbox Code Playgroud)
这是NSArray无法实现的.
谢谢
我想获取应用程序documents文件夹中的所有文件名,并将它们放在一个文件夹中NSMutableArray.没有更多,没有更少.
我有一个自定义对象,如:
#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) 即使这对我的代码影响微乎其微,但我想了解一个操作是否比另一个更昂贵:-).
我有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) 我有一个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"}不能是数组.
nsmutablearray ×10
objective-c ×6
ios ×3
iphone ×3
nsarray ×2
nsstring ×2
cocoa ×1
cocoa-touch ×1
core-data ×1
immutability ×1
properties ×1
split ×1
string ×1
uitableview ×1
xcode ×1