Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 用一组类填充NSMutableArray,然后将它们取回_Iphone_Nsmutablearray - Fatal编程技术网

Iphone 用一组类填充NSMutableArray,然后将它们取回

Iphone 用一组类填充NSMutableArray,然后将它们取回,iphone,nsmutablearray,Iphone,Nsmutablearray,希望我能说清楚这一点,但我对Objective-C还不熟悉,老实说,首先我对数组不是很在行 因此,我有一个Singleton类(称为SingletonState),我正在使用它在我的应用程序中传递变量(请不要讨论我是否应该使用Singleton类,我稍后会解决这个问题)。在这个类中,我有一个NSMutableArray(称为arrayMyEvents)。我还创建了一个类,用于存储事件列表(称为EventClass)。当用户登录时,我调用一个web服务并返回3个字符串。第三个字符串是以逗号分隔的值

希望我能说清楚这一点,但我对Objective-C还不熟悉,老实说,首先我对数组不是很在行

因此,我有一个Singleton类(称为SingletonState),我正在使用它在我的应用程序中传递变量(请不要讨论我是否应该使用Singleton类,我稍后会解决这个问题)。在这个类中,我有一个NSMutableArray(称为arrayMyEvents)。我还创建了一个类,用于存储事件列表(称为EventClass)。当用户登录时,我调用一个web服务并返回3个字符串。第三个字符串是以逗号分隔的值列表。我解析数据并填充自定义类EventClass。然后我将这个类添加到SingletonState.arrayMyEvents

所有这些我都能用。我可以转到另一个ViewController并访问arrayMyEvents中项目的“计数”

问题:我现在想编辑数组中的一个ScheduledEventsClass“es”。如何访问它、编辑某些属性并更新SingletonState类中的属性

以下是我尝试过的一些代码:

NSString *sWebServiceEvents = [[NSString alloc] initWithFormat:@"%@", [result objectAtIndex:2]];

            if ( [ sWebServiceEvents isEqualToString:@"NULL" ] != true ) {

                NSArray *arrayEvents = [sWebServiceEvents componentsSeparatedByString:@","];

                // If the array has not been initialized they initialize it.
                if (sharedState.arrayMyEvents == nil) {
                    sharedState.arrayMyEvents = [[NSMutableArray alloc ] init ];
                }


                for (NSString * sEvent in arrayEvents) {
                    // Set equal to the value of the array (the Event Number) at the same
                    // position as the row that we are being asked to return a cell/row for.
                    EventClass *eventClass = [[EventClass alloc] retain];

                    eventClass.sEvent = sEvent;

                    [ sharedState.arrayEvents addObject:eventClass ];

                }

                NSLog(@"LoginView - sharedState.arrayMyEvents Count: %d", [sharedState.arrayMyEvents count]);
            }
我正在尝试在另一个ViewController中访问它:

EventClass *eventClass =
[sharedState.arrayMyEvents objectAtIndex:row ];
NSLog(@"eventClass.sEventNumber: ", eventClass.sEventNumber);
eventClass.sLocation = @"Jason's Big Location";

sEvent循环将出现一些内存泄漏<代码>[[EventClass alloc]retain]为您留下一个引用计数为2的未初始化EventClass对象。您需要将其更改为
[[[EventClass alloc]init]autorelease]
以防止泄漏。arrayEvents NSMutableArray将在addObject:调用期间保留它。(这不应该是循环中的[sharedState.arrayMyEventsaddObject:eventClass]吗?)

在这之后,在第二段代码中编辑EventClass对象所要做的就是编辑它。eventClass变量是指向数组中对象的指针。对该对象所做的任何操作都不会影响引用它的指针,而是会影响它引用的数据。第二个块中的代码应根据需要更改选定对象的插槽位置


还有一些内存泄漏。使用Cmd-Shift-A构建静态分析器,它会告诉您在哪里。

您将从sEvent循环中发现一些内存泄漏<代码>[[EventClass alloc]retain]为您留下一个引用计数为2的未初始化EventClass对象。您需要将其更改为
[[[EventClass alloc]init]autorelease]
以防止泄漏。arrayEvents NSMutableArray将在addObject:调用期间保留它。(这不应该是循环中的[sharedState.arrayMyEventsaddObject:eventClass]吗?)

在这之后,在第二段代码中编辑EventClass对象所要做的就是编辑它。eventClass变量是指向数组中对象的指针。对该对象所做的任何操作都不会影响引用它的指针,而是会影响它引用的数据。第二个块中的代码应根据需要更改选定对象的插槽位置


还有一些内存泄漏。使用Cmd-Shift-A与静态分析器一起构建,它会告诉您在哪里。

可能问题是您将它们放在
sharedState.arrayEvents
中,但尝试将它们从
sharedState.arrayMyEvents
中取出。不同的变量


还有,大量内存泄漏。

问题可能是您将它们放在
共享状态.arrayEvents
中,但尝试将它们从
共享状态.arrayyEvents
中取出。不同的变量


还有,大量内存泄漏。

谢谢John和St3fan,感谢您的回答和时间

我想我解决了我的问题:

基本上,我创建的类(EventClass)的属性设置如下:

@property (nonatomic, assign) NSString *sStudyNumber;   
@property (nonatomic, assign) NSString *sTheater;
@property (nonatomic, retain) NSString *sStudyNumber;   
@property (nonatomic, retain) NSString *sTheater;
但是,它们应该是(或者至少我让它这样工作):

然后,在我的第二种观点中,我能够做到这一点:

EventClass *eventClass = [sharedState.arrayMyEvents objectAtIndex:row ];
NSLog(@"MyEvents: %@", eventClass.sEventNumber);
    eventClass.sLocation = @"Jason's Big Location";
然后,我用另一种视图方法检查了它,它仍然存在:

EventClass *eventClass = [sharedState.arrayMyEvents objectAtIndex:row ];
NSLog(@"MyEvents: %@", eventClass.sEventNumber);
NSLog(@"MyEvents: %@", eventClass.sLocation);
我还在另一个视图中检查了它,该值在SharedState.arrayMyEvents中保持不变,没有问题。:)

最后,我相信我可以归结为“分配”和“保留”之间的区别

现在,关于内存泄漏:(

请让我知道,如果你看到任何其他问题与此

谢谢,
Jason

谢谢John和St3fan,感谢你们的回答和时间

我想我解决了我的问题:

基本上,我创建的类(EventClass)的属性设置如下:

@property (nonatomic, assign) NSString *sStudyNumber;   
@property (nonatomic, assign) NSString *sTheater;
@property (nonatomic, retain) NSString *sStudyNumber;   
@property (nonatomic, retain) NSString *sTheater;
但是,它们应该是(或者至少我让它这样工作):

然后,在我的第二种观点中,我能够做到这一点:

EventClass *eventClass = [sharedState.arrayMyEvents objectAtIndex:row ];
NSLog(@"MyEvents: %@", eventClass.sEventNumber);
    eventClass.sLocation = @"Jason's Big Location";
然后,我用另一种视图方法检查了它,它仍然存在:

EventClass *eventClass = [sharedState.arrayMyEvents objectAtIndex:row ];
NSLog(@"MyEvents: %@", eventClass.sEventNumber);
NSLog(@"MyEvents: %@", eventClass.sLocation);
我还在另一个视图中检查了它,该值在SharedState.arrayMyEvents中保持不变,没有问题。:)

最后,我相信我可以归结为“分配”和“保留”之间的区别

现在,关于内存泄漏:(

请让我知道,如果你看到任何其他问题与此

谢谢,
Jason

那么,到底是什么不起作用呢?在我的EventClass中将属性从assign更改为retain之前,值没有保持分配状态。那么,到底是什么不起作用呢?在我的EventClass中将属性从assign更改为retain之前,值没有保持分配状态。嗨,John,首先,非常感谢您抽出时间帮助我解决这个问题非常感谢!!!我将检查内存泄漏。了解内存管理已接近我清单上的下一步(iPhone开发的长长清单)。我想我已经解决了我的问题。请参见下面的答案区域,因为我在评论区域的空间不足。再次感谢!!!JasonHi John,首先,非常感谢您花时间帮助我解决此问题。非常感谢!!!我将检查内存泄漏。了解