Objective c 为什么,当我初始化一个NSArray时,它最终是空的吗?
我是一个新手,所以如果它被证明是愚蠢的事情,我不会感到惊讶,但我正把头撞在墙上,试图弄明白为什么NSArray haikuArray在我尝试初始化WithObjects之后,从来没有包含任何对象。有什么想法吗 Gay_HaikuViewController.h文件:Objective c 为什么,当我初始化一个NSArray时,它最终是空的吗?,objective-c,ios5,nsarray,Objective C,Ios5,Nsarray,我是一个新手,所以如果它被证明是愚蠢的事情,我不会感到惊讶,但我正把头撞在墙上,试图弄明白为什么NSArray haikuArray在我尝试初始化WithObjects之后,从来没有包含任何对象。有什么想法吗 Gay_HaikuViewController.h文件: #import <UIKit/UIKit.h> #import "Array Setup.h" @interface Gay_HaikuViewController : UIViewController { Array
#import <UIKit/UIKit.h>
#import "Array Setup.h"
@interface Gay_HaikuViewController : UIViewController
{
Array_Setup *gayHaikuSetup;
Array_Setup *userHaikuSetup;
NSMutableArray *allHaiku;
IBOutlet UITextView *haikuText;
}
@property (nonatomic,retain) Array_Setup *gayHaikuSetup;
@property (nonatomic,retain) Array_Setup *userHaikuSetup;
@property (nonatomic,retain) NSMutableArray *allHaiku;
@property (nonatomic,retain) IBOutlet UITextView *haikuText;
-(IBAction)nextHaiku:(id)sender;
提前感谢大家的帮助。
initWithObjects
返回一个值,但您没有将array
设置为返回值。此代码中存在严重问题:
arrayOfUserHaiku = [NSMutableArray alloc];
[arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
NSError *error = nil;
if (!arrayOfUserHaiku)
{
NSLog(@"Read failed: %@.",[error localizedDescription]);
}
else
{
NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
}
return arrayOfUserHaiku;
}
alloc
和init
init
方法有时(通常,实际上)不会返回与alloc
返回的对象相同的对象。也就是说,这应该是:
arrayOfUserHaiku=[[NSMutableArray alloc]initWithContentsOfFile:@/tmp/cool.txt]错误
不会由该代码中的任何内容设置;这不是一个全球性的问题#import "Array Setup.h"
@implementation Array_Setup
@synthesize arrayOfGayHaiku,arrayOfUserHaiku;
-(NSMutableArray *)readFromUserArray
{
arrayOfUserHaiku = [NSMutableArray alloc];
[arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
NSError *error = nil;
if (!arrayOfUserHaiku)
{
NSLog(@"Read failed: %@.",[error localizedDescription]);
}
else
{
NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
}
return arrayOfUserHaiku;
}
-(NSArray *)readFromGayArray
{
NSArray *array = [NSArray alloc];
[array initWithObjects:@"Lorem", @"ipsum", nil];
return array;
}
@end
#import "Array_Setup.h"
@implementation Array_Setup
@synthesize arrayOfGayHaiku,arrayOfUserHaiku;
-(NSMutableArray *)readFromUserArray
{
arrayOfUserHaiku = [[NSMutableArray alloc] initWithContentsOfFile:@"/tmp/cool.txt"];
// [arrayOfUserHaiku initWithContentsOfFile:@"/tmp/cool.txt"];
NSError *error = nil;
if (!arrayOfUserHaiku)
{
NSLog(@"Read failed: %@.",[error localizedDescription]);
}
else
{
NSLog(@"cool.txt looks like this: %@.",arrayOfUserHaiku);
}
return arrayOfUserHaiku;
}
-(NSArray *)readFromGayArray
{
NSArray *array = [NSArray arrayWithObjects:@"I don't understand.\nYou love it when I do that--\nWait, no. That's Stephen.",
@"Frantically hiding\nPorno and Mapplethorpe prints--\nMom is on her way.",
@"Remember when I\nSaid I disliked oral sex?\nI meant just with you.",
@"You were perfection.\nThen you misspelled 'embarrassed.'\nDon't call me again.",
//Am omitting a bunch of these to make my Stack Overflow question shorter.
@"I know you think I\nLike it when you slap my ass.\nYou are mistaken.",
@"Flailing to the beat--\nCould I possibly look half\nAs dumb as I feel?",
@"Last night, you looked hot.\nToday, you want to discuss\nThe whole foods movement.", nil];
return array;
}
@end
Gay_HaikuViewController.m文件:
#import "Gay_HaikuViewController.h"
#import "Array Setup.h"
@interface Gay_HaikuViewController ()
@end
@implementation Gay_HaikuViewController
@synthesize gayHaikuSetup,userHaikuSetup,allHaiku,haikuText;
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *haikuArray = [gayHaikuSetup arrayOfGayHaiku];
haikuArray = [gayHaikuSetup readFromGayArray];
//This next line is how I know there are no objects in haikuArray.
NSLog(@"%d",[haikuArray count]);
NSMutableArray *userArray = [userHaikuSetup arrayOfUserHaiku];
userArray = [userHaikuSetup readFromUserArray];
allHaiku = [[NSMutableArray alloc] init];
for (int i=0; i<[haikuArray count]; i++)
[allHaiku addObject:[haikuArray objectAtIndex:i]];
for (int i=0; i<[userArray count]; i++)
[allHaiku addObject:[userArray objectAtIndex:i]];
}
userHaikuSetup= [[Array_Setup alloc] init];
gayHaikuSetup= [[Array_Setup alloc] init]; // [gayHaikuSetup arrayOfGayHaiku];
NSArray * haikuArray = [NSArray arrayWithArray: [gayHaikuSetup readFromGayArray]];
//This next line I added to find out whether the array had any objects--I always get 0.
NSLog(@"%lu",[haikuArray count]);
NSMutableArray *userArray = [userHaikuSetup readFromUserArray];
allHaiku = [[NSMutableArray alloc] init];
for (int i=0; i<[haikuArray count]; i++)
[allHaiku addObject:[haikuArray objectAtIndex:i]];
for (int i=0; i<[userArray count]; i++)
[allHaiku addObject:[userArray objectAtIndex:i]];
NSLog(@"%lu",[allHaiku count]);
userHaikuSetup=[[Array_Setup alloc]init];
gayHaikuSetup=[[Array_Setup alloc]init];//[gayHaikuSetup arrayOfGayHaiku];
NSArray*haikuArray=[NSArray ARRAY WITHARRAY:[gayHaikuSetup readFromGayArray]];
//我添加了下一行来确定数组是否有任何对象——我总是得到0。
NSLog(@“%lu”,[haikuArray计数]);
NSMutableArray*userArray=[userHaikuSetup readFromUserArray];
allHaiku=[[NSMutableArray alloc]init];
对于(int i=0;i请使用lorem ipsum编辑数组中的文本。人们可能会觉得它令人反感。最好将它缩短为一行,因为代码不需要运行。完成。对此表示抱歉。好的。请原谅我不理解,但是initWithObjects
返回的值是什么?我尝试了initWithObjects:count:
但不断收到一条错误消息,要求在计数之前执行:
,这没有任何意义——当我添加它时,它只是产生了另一条错误消息。@JoelDerfner:返回值是已初始化的对象。感谢所有这些。我正在使用ARC,但我已经实现了您的其余建议,并且它是正确的更干净。请看我的答案;您的代码可能会运行,但这并不意味着它是正确的。而且您的答案缺乏解释。
userHaikuSetup= [[Array_Setup alloc] init];
gayHaikuSetup= [[Array_Setup alloc] init]; // [gayHaikuSetup arrayOfGayHaiku];
NSArray * haikuArray = [NSArray arrayWithArray: [gayHaikuSetup readFromGayArray]];
//This next line I added to find out whether the array had any objects--I always get 0.
NSLog(@"%lu",[haikuArray count]);
NSMutableArray *userArray = [userHaikuSetup readFromUserArray];
allHaiku = [[NSMutableArray alloc] init];
for (int i=0; i<[haikuArray count]; i++)
[allHaiku addObject:[haikuArray objectAtIndex:i]];
for (int i=0; i<[userArray count]; i++)
[allHaiku addObject:[userArray objectAtIndex:i]];
NSLog(@"%lu",[allHaiku count]);